/* A plugin example that shows which declarations are caught by FINISH_DECL */ #include "gcc-plugin.h" #include #include "config.h" #include "system.h" #include "coretypes.h" #include "tree.h" #include "tree-pass.h" #include "intl.h" #include "diagnostic.h" int plugin_is_GPL_compatible; /* Callback function to invoke after GCC finishes a declaration. */ void plugin_finish_decl (void *event_data, void *data) { tree decl = (tree) event_data; const char *kind = NULL; switch (TREE_CODE(decl)) { case FUNCTION_DECL: kind = "Function"; break; case PARM_DECL: kind = "Parameter"; break; case VAR_DECL: if (DECL_FILE_SCOPE_P(decl)) kind = "Global"; else kind = "Local"; break; case FIELD_DECL: kind = "Field"; break; default: kind = "Unknown"; } warning (0, G_("Decl %s %s"), kind, IDENTIFIER_POINTER (DECL_NAME (decl))); } int plugin_init (struct plugin_name_args *plugin_info, struct plugin_gcc_version *version) { const char *plugin_name = plugin_info->base_name; register_callback (plugin_name, PLUGIN_FINISH_DECL, plugin_finish_decl, NULL); return 0; }