From 705e2d28a1c830064e0bc77fd7e37f7e73b01516 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 4 Jan 2007 15:32:26 +0000 Subject: [PATCH] re PR preprocessor/28165 (_Pragma GCC system_header broken) libcpp PR preprocessor/28165: * internal.h (cpp_in_primary_file): New function. * directives.c (do_include_next): Use cpp_in_primary_file. (do_pragma_once): Likewise. (do_pragma_system_header): Likewise. gcc/testsuite PR preprocessor/28165: * gcc.dg/cpp/pr28165.c: New file. From-SVN: r120441 --- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/cpp/pr28165.c | 6 ++++++ libcpp/ChangeLog | 8 ++++++++ libcpp/directives.c | 11 +++++------ libcpp/internal.h | 9 ++++++++- 5 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/cpp/pr28165.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 240666861916..0663f79bb8e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-01-04 Tom Tromey + + PR preprocessor/28165: + * gcc.dg/cpp/pr28165.c: New file. + 2007-01-03 Josh Conner PR middle-end/29683 diff --git a/gcc/testsuite/gcc.dg/cpp/pr28165.c b/gcc/testsuite/gcc.dg/cpp/pr28165.c new file mode 100644 index 000000000000..71c7c1dba462 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/pr28165.c @@ -0,0 +1,6 @@ +/* Copyright (C) 2007 Free Software Foundation, Inc. */ +/* PR preprocessor/28165 */ + +/* { dg-do preprocess } */ +#pragma GCC system_header /* { dg-warning "system_header" "ignored" } */ +_Pragma ("GCC system_header") /* { dg-warning "system_header" "ignored" } */ diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 96c5140e7077..072c6aadbb99 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,11 @@ +2007-01-04 Tom Tromey + + PR preprocessor/28165: + * internal.h (cpp_in_primary_file): New function. + * directives.c (do_include_next): Use cpp_in_primary_file. + (do_pragma_once): Likewise. + (do_pragma_system_header): Likewise. + 2006-12-29 Ian Lance Taylor * lex.c (_cpp_clean_line): Add uses of __builtin_expect. Don't diff --git a/libcpp/directives.c b/libcpp/directives.c index 7fb142e48c79..2ef914a435e9 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -1,6 +1,7 @@ /* CPP Library. (Directive handling.) Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004, 2005, + 2007 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 @@ -772,7 +773,7 @@ do_include_next (cpp_reader *pfile) /* If this is the primary source file, warn and use the normal search logic. */ - if (! pfile->buffer->prev) + if (cpp_in_primary_file (pfile)) { cpp_error (pfile, CPP_DL_WARNING, "#include_next in primary source file"); @@ -1346,7 +1347,7 @@ do_pragma (cpp_reader *pfile) static void do_pragma_once (cpp_reader *pfile) { - if (pfile->buffer->prev == NULL) + if (cpp_in_primary_file (pfile)) cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file"); check_eol (pfile); @@ -1396,9 +1397,7 @@ do_pragma_poison (cpp_reader *pfile) static void do_pragma_system_header (cpp_reader *pfile) { - cpp_buffer *buffer = pfile->buffer; - - if (buffer->prev == 0) + if (cpp_in_primary_file (pfile)) cpp_error (pfile, CPP_DL_WARNING, "#pragma system_header ignored outside include file"); else diff --git a/libcpp/internal.h b/libcpp/internal.h index 857bfe1d8c58..20f423580517 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -1,5 +1,5 @@ /* Part of CPP library. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it @@ -488,6 +488,13 @@ cpp_in_system_header (cpp_reader *pfile) #define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic) #define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional) +static inline int cpp_in_primary_file (cpp_reader *); +static inline int +cpp_in_primary_file (cpp_reader *pfile) +{ + return pfile->line_table->depth == 1; +} + /* In errors.c */ extern int _cpp_begin_message (cpp_reader *, int, source_location, unsigned int); -- 2.39.2