[PATCH] Fix libcpp do_linemarker (PR preprocessor/29612)
Jakub Jelinek
jakub@redhat.com
Wed Nov 8 12:46:00 GMT 2006
Hi!
As the attached testcases show, when handling # <linenum> <filename> <flags>
directives we were never clearing pfile->buffer->sysp, even when leaving
from system header to non-system header (or main file).
AFAIK gcc -E outputs the 3 or 3 4 flags at the end for all # <linenum>
directives when in system headers, so we should trust those and when not
seeing these just reset pfile->buffer->sysp.
Ok for 4.1/4.2/4.3?
2006-11-08 Jakub Jelinek <jakub@redhat.com>
PR preprocessor/29612
* directives.c (do_linemarker): Set pfile->buffer->sysp always, not
only when new_sysp is non-zero.
* gcc.dg/cpp/pr29612-1.c: New test.
* gcc.dg/cpp/pr29612-2.c: New test.
--- libcpp/directives.c.jj 2006-10-05 00:31:24.000000000 +0200
+++ libcpp/directives.c 2006-11-08 12:16:36.000000000 +0100
@@ -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, 2006
+ 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
@@ -942,8 +943,8 @@ do_linemarker (cpp_reader *pfile)
flag = read_flag (pfile, flag);
if (flag == 4)
new_sysp = 2;
- pfile->buffer->sysp = new_sysp;
}
+ pfile->buffer->sysp = new_sysp;
check_eol (pfile);
}
--- gcc/testsuite/gcc.dg/cpp/pr29612-1.c.jj 2006-11-08 12:52:28.000000000 +0100
+++ gcc/testsuite/gcc.dg/cpp/pr29612-1.c 2006-11-08 13:07:01.000000000 +0100
@@ -0,0 +1,15 @@
+/* PR preprocessor/29612 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+# 6 "pr29612-1.c"
+
+int foo (void) { return 'ab'; } /* { dg-warning "multi-character" } */
+
+# 1 "foo.h" 1 3
+
+int bar (void) { return 'ab'; } /* No warning in system header. */
+
+# 14 "pr29612-1.c" 2
+
+int baz (void) { return 'ab'; } /* { dg-warning "multi-character" } */
--- gcc/testsuite/gcc.dg/cpp/pr29612-2.c.jj 2006-11-08 12:52:28.000000000 +0100
+++ gcc/testsuite/gcc.dg/cpp/pr29612-2.c 2006-11-08 13:01:59.000000000 +0100
@@ -0,0 +1,18 @@
+/* PR preprocessor/29612 */
+/* { dg-do preprocess } */
+/* { dg-options "-Wtraditional -fno-show-column" } */
+
+# 6 "pr29612-2.c"
+
+#if 1U /* { dg-warning "traditional C rejects" "numeric constant suffix" } */
+#endif
+
+# 1 "foo.h" 1 3
+
+#if 1U
+#endif /* No warning in system header. */
+
+# 16 "pr29612-2.c" 2
+
+#if 1U /* { dg-warning "traditional C rejects" "numeric constant suffix" } */
+#endif
Jakub
More information about the Gcc-patches
mailing list