diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.c | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.c b/gcc-4.9/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.c new file mode 100644 index 000000000..e83476b63 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.c @@ -0,0 +1,79 @@ +/* This plugin tests the correct operation of a PLUGIN_START_UNIT callback. + * By the time a PLUGIN_START_UNIT callback is invoked, the frontend + * initialization should have completed. At least the different *_type_nodes + * should have been created. This plugin creates an artificial global + * interger variable. + * +*/ +#include "gcc-plugin.h" +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "stringpool.h" +#include "toplev.h" +#include "basic-block.h" +#include "pointer-set.h" +#include "hash-table.h" +#include "vec.h" +#include "ggc.h" +#include "basic-block.h" +#include "tree-ssa-alias.h" +#include "internal-fn.h" +#include "gimple-fold.h" +#include "tree-eh.h" +#include "gimple-expr.h" +#include "is-a.h" +#include "gimple.h" +#include "tree.h" +#include "tree-pass.h" +#include "intl.h" + +int plugin_is_GPL_compatible; +static tree fake_var = NULL; + +static bool +gate_start_unit (void) +{ + return true; +} + +static void start_unit_callback (void *gcc_data, void *user_data) +{ + if (integer_type_node) { + fake_var = build_decl (UNKNOWN_LOCATION, VAR_DECL, + get_identifier ("_fake_var_"), + integer_type_node); + TREE_PUBLIC (fake_var) = 1; + DECL_ARTIFICIAL (fake_var) = 1; + } +} + +static void finish_unit_callback (void *gcc_data, void *user_data) +{ + if (fake_var == NULL) { + printf ("fake_var not created \n"); + return; + } + if (TREE_CODE (fake_var) != VAR_DECL) { + printf ("fake_var not a VAR_DECL \n"); + return; + } + if (TREE_CODE (TREE_TYPE (fake_var)) != INTEGER_TYPE) { + printf ("fake_var not INTEGER_TYPE \n"); + return; + } + if (DECL_ARTIFICIAL (fake_var) == 0) { + printf ("fake_var not ARTIFICIAL \n"); + return; + } +} + +int plugin_init (struct plugin_name_args *plugin_info, + struct plugin_gcc_version *version) +{ + register_callback ("start_unit", PLUGIN_START_UNIT, &start_unit_callback, NULL); + register_callback ("finish_unit", PLUGIN_FINISH_UNIT, &finish_unit_callback, NULL); + return 0; +} |