diff options
Diffstat (limited to 'gcc/c-lex.c')
-rw-r--r-- | gcc/c-lex.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/gcc/c-lex.c b/gcc/c-lex.c index 84ef09499bc..63ae9ba6676 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -30,6 +30,7 @@ Boston, MA 02111-1307, USA. */ #include "c-tree.h" #include "flags.h" #include "timevar.h" +#include "cpplib.h" #include "c-pragma.h" #include "toplev.h" #include "intl.h" @@ -52,8 +53,6 @@ Boston, MA 02111-1307, USA. */ #define GET_ENVIRONMENT(ENV_VALUE,ENV_NAME) ((ENV_VALUE) = getenv (ENV_NAME)) #endif -#include "cpplib.h" - #if USE_CPPLIB extern cpp_reader parse_in; #else @@ -162,6 +161,7 @@ static void cb_ident PARAMS ((cpp_reader *, const unsigned char *, static void cb_enter_file PARAMS ((cpp_reader *)); static void cb_leave_file PARAMS ((cpp_reader *)); static void cb_rename_file PARAMS ((cpp_reader *)); +static void cb_def_pragma PARAMS ((cpp_reader *)); #endif @@ -210,6 +210,7 @@ init_c_lex (filename) parse_in.cb.enter_file = cb_enter_file; parse_in.cb.leave_file = cb_leave_file; parse_in.cb.rename_file = cb_rename_file; + parse_in.cb.def_pragma = cb_def_pragma; /* Make sure parse_in.digraphs matches flag_digraphs. */ CPP_OPTION (&parse_in, digraphs) = flag_digraphs; @@ -777,6 +778,27 @@ cb_rename_file (pfile) /* Hook for C++. */ extract_interface_info (); } + +static void +cb_def_pragma (pfile) + cpp_reader *pfile; +{ + /* Issue a warning message if we have been asked to do so. Ignore + unknown pragmas in system headers unless an explicit + -Wunknown-pragmas has been given. */ + if (warn_unknown_pragmas > in_system_header) + { + const unsigned char *space, *name; + const cpp_token *t = pfile->first_directive_token + 2; + + space = t[0].val.node->name; + name = t[1].type == CPP_NAME ? t[1].val.node->name : 0; + if (name) + warning ("ignoring #pragma %s %s", space, name); + else + warning ("ignoring #pragma %s", space); + } +} #endif /* USE_CPPLIB */ /* Parse a '\uNNNN' or '\UNNNNNNNN' sequence. |