summaryrefslogtreecommitdiff
path: root/gcc/c-lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/c-lex.c')
-rw-r--r--gcc/c-lex.c26
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.