summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-19 16:26:52 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-19 16:26:52 +0000
commit0391a567ca45fa55a6284ef05eeaca0b67593df3 (patch)
tree8ef75029296d8398d750c46c5848160b18bbabfd /gcc
parentc41f78ca4d41d7cd5d281d36ca169724d6a257ca (diff)
downloadgcc-0391a567ca45fa55a6284ef05eeaca0b67593df3.tar.gz
[gcc/c-family]
2013-11-19 Basile Starynkevitch <basile@starynkevitch.net> * c-opts.c: Include plugin.h. (cb_file_change): Invoke plugin event PLUGIN_INCLUDE_FILE. [gcc/] 2013-11-19 Basile Starynkevitch <basile@starynkevitch.net> * plugin.def (PLUGIN_INCLUDE_FILE): New event, invoked in cb_file_change. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205038 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-opts.c12
-rw-r--r--gcc/plugin.def6
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b2d761aba91..d76c2a30268 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-19 Basile Starynkevitch <basile@starynkevitch.net>
+
+ * plugin.def (PLUGIN_INCLUDE_FILE): New event, invoked in
+ cb_file_change.
+
2013-11-19 Peter Bergner <bergner@vnet.ibm.com>
* loop-doloop.c (doloop_optimize_loops): Remove unused
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 599c024c9b0..5bbd5f5c5ef 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-19 Basile Starynkevitch <basile@starynkevitch.net>
+
+ * c-opts.c: Include plugin.h.
+ (cb_file_change): Invoke plugin event PLUGIN_INCLUDE_FILE.
+
2013-11-19 Marek Polacek <polacek@redhat.com>
* c-ubsan.c (ubsan_instrument_division): Adjust ubsan_create_data
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index 34fe94de34b..f368cab289f 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see
#include "debug.h" /* For debug_hooks. */
#include "opts.h"
#include "options.h"
+#include "plugin.h" /* For PLUGIN_INCLUDE_FILE event. */
#include "mkdeps.h"
#include "c-target.h"
#include "tm.h" /* For BYTES_BIG_ENDIAN,
@@ -1397,6 +1398,17 @@ cb_file_change (cpp_reader * ARG_UNUSED (pfile),
else
fe_file_change (new_map);
+ if (new_map
+ && (new_map->reason == LC_ENTER || new_map->reason == LC_RENAME))
+ {
+ /* Signal to plugins that a file is included. This could happen
+ several times with the same file path, e.g. because of
+ several '#include' or '#line' directives... */
+ invoke_plugin_callbacks
+ (PLUGIN_INCLUDE_FILE,
+ const_cast<char*> (ORDINARY_MAP_FILE_NAME (new_map)));
+ }
+
if (new_map == 0 || (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map)))
{
pch_cpp_save_state ();
diff --git a/gcc/plugin.def b/gcc/plugin.def
index c4ca61be14a..25a645854a7 100644
--- a/gcc/plugin.def
+++ b/gcc/plugin.def
@@ -92,6 +92,12 @@ DEFEVENT (PLUGIN_EARLY_GIMPLE_PASSES_END)
/* Called when a pass is first instantiated. */
DEFEVENT (PLUGIN_NEW_PASS)
+/* Called when a file is #include-d or given thru #line directive.
+ Could happen many times. The event data is the included file path,
+ as a const char* pointer. */
+DEFEVENT (PLUGIN_INCLUDE_FILE)
+
+
/* After the hard-coded events above, plugins can dynamically allocate events
at run time.
PLUGIN_EVENT_FIRST_DYNAMIC only appears as last enum element. */