1/* Demonstrates how to add custom pragmas */ 2 3#include "gcc-plugin.h" 4#include <stdlib.h> 5#include "config.h" 6#include "system.h" 7#include "coretypes.h" 8#include "tm.h" 9#include "rtl.h" 10#include "tree.h" 11#include "function.h" 12#include "c-family/c-pragma.h" 13#include "cpplib.h" 14#include "tree-pass.h" 15#include "intl.h" 16#include "toplev.h" 17#include "diagnostic.h" 18 19int plugin_is_GPL_compatible; 20 21 22/* handler of #pragma GCCPLUGIN sayhello "message" is quite similar to 23 handler of #pragma GCC message...*/ 24 25static void 26handle_pragma_sayhello (cpp_reader *dummy) 27{ 28 tree message = 0; 29 if (pragma_lex (&message) != CPP_STRING) 30 { 31 warning (OPT_Wpragmas, "%<#pragma GCCPLUGIN sayhello%> is not a string"); 32 return; 33 } 34 if (TREE_STRING_LENGTH (message) > 1) 35 if (cfun) 36 warning (OPT_Wpragmas, 37 "%<pragma GCCPLUGIN sayhello%> from function %qE: %s", 38 cfun->decl, TREE_STRING_POINTER (message)); 39 else 40 warning (OPT_Wpragmas, 41 "%<pragma GCCPLUGIN sayhello%> outside of function: %s", 42 TREE_STRING_POINTER (message)); 43} 44 45/* Plugin callback called during pragma registration */ 46 47static void 48register_my_pragma (void *event_data, void *data) 49{ 50 warning (0, G_("Callback to register pragmas")); 51 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello); 52} 53 54int 55plugin_init (struct plugin_name_args *plugin_info, 56 struct plugin_gcc_version *version) 57{ 58 const char *plugin_name = plugin_info->base_name; 59 60 register_callback (plugin_name, PLUGIN_PRAGMAS, register_my_pragma, NULL); 61 return 0; 62} 63