Commit 705e2d28 by Tom Tromey Committed by Tom Tromey

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
parent 79e6eaeb
2007-01-04 Tom Tromey <tromey@redhat.com>
PR preprocessor/28165:
* gcc.dg/cpp/pr28165.c: New file.
2007-01-03 Josh Conner <jconner@apple.com> 2007-01-03 Josh Conner <jconner@apple.com>
PR middle-end/29683 PR middle-end/29683
/* 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" } */
2007-01-04 Tom Tromey <tromey@redhat.com>
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 <iant@google.com> 2006-12-29 Ian Lance Taylor <iant@google.com>
* lex.c (_cpp_clean_line): Add uses of __builtin_expect. Don't * lex.c (_cpp_clean_line): Add uses of __builtin_expect. Don't
......
/* CPP Library. (Directive handling.) /* CPP Library. (Directive handling.)
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 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. Contributed by Per Bothner, 1994-95.
Based on CCCP program by Paul Rubin, June 1986 Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987 Adapted to ANSI C, Richard Stallman, Jan 1987
...@@ -772,7 +773,7 @@ do_include_next (cpp_reader *pfile) ...@@ -772,7 +773,7 @@ do_include_next (cpp_reader *pfile)
/* If this is the primary source file, warn and use the normal /* If this is the primary source file, warn and use the normal
search logic. */ search logic. */
if (! pfile->buffer->prev) if (cpp_in_primary_file (pfile))
{ {
cpp_error (pfile, CPP_DL_WARNING, cpp_error (pfile, CPP_DL_WARNING,
"#include_next in primary source file"); "#include_next in primary source file");
...@@ -1346,7 +1347,7 @@ do_pragma (cpp_reader *pfile) ...@@ -1346,7 +1347,7 @@ do_pragma (cpp_reader *pfile)
static void static void
do_pragma_once (cpp_reader *pfile) 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"); cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
check_eol (pfile); check_eol (pfile);
...@@ -1396,9 +1397,7 @@ do_pragma_poison (cpp_reader *pfile) ...@@ -1396,9 +1397,7 @@ do_pragma_poison (cpp_reader *pfile)
static void static void
do_pragma_system_header (cpp_reader *pfile) do_pragma_system_header (cpp_reader *pfile)
{ {
cpp_buffer *buffer = pfile->buffer; if (cpp_in_primary_file (pfile))
if (buffer->prev == 0)
cpp_error (pfile, CPP_DL_WARNING, cpp_error (pfile, CPP_DL_WARNING,
"#pragma system_header ignored outside include file"); "#pragma system_header ignored outside include file");
else else
......
/* Part of CPP library. /* 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. Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
...@@ -488,6 +488,13 @@ cpp_in_system_header (cpp_reader *pfile) ...@@ -488,6 +488,13 @@ cpp_in_system_header (cpp_reader *pfile)
#define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic) #define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic)
#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional) #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 */ /* In errors.c */
extern int _cpp_begin_message (cpp_reader *, int, extern int _cpp_begin_message (cpp_reader *, int,
source_location, unsigned int); source_location, unsigned int);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment