c-parser.c (disable_extension_diagnostics): Save warn_overlength_strings.
authorTom Tromey <tromey@redhat.com>
Mon, 14 Mar 2011 17:58:12 +0000 (17:58 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Mon, 14 Mar 2011 17:58:12 +0000 (17:58 +0000)
gcc
* c-parser.c (disable_extension_diagnostics): Save
warn_overlength_strings.
(restore_extension_diagnostics): Restore warn_overlength_strings.
gcc/testsuite
* gcc.dg/Woverlength-strings-pedantic-c89-ext.c: New file.
* gcc.dg/Woverlength-strings-pedantic-c90-ext.c: New file.
* gcc.dg/Woverlength-strings-pedantic-c99-ext.c: New file.

From-SVN: r170947

gcc/ChangeLog
gcc/c-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-ext.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-ext.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-ext.c [new file with mode: 0644]

index 0ead0af517071e2a29aea0403f49a20834d57ca1..f1a353c00fb24233c30f22c414eac6aaa94e5e0f 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-14  Tom Tromey  <tromey@redhat.com>
+
+       * c-parser.c (disable_extension_diagnostics): Save
+       warn_overlength_strings.
+       (restore_extension_diagnostics): Restore warn_overlength_strings.
+
 2011-03-14  Jakub Jelinek  <jakub@redhat.com>
 
        * BASE-VER: Change to 4.7.0.
index 69ce2e50befdd2f210f8c34772462741efba10e6..7b18827cfc634836e1bf81cca0832fd34a65f60d 100644 (file)
@@ -1045,13 +1045,15 @@ disable_extension_diagnostics (void)
             | (warn_traditional << 2)
             | (flag_iso << 3)
             | (warn_long_long << 4)
-            | (warn_cxx_compat << 5));
+            | (warn_cxx_compat << 5)
+            | (warn_overlength_strings << 6));
   cpp_opts->cpp_pedantic = pedantic = 0;
   warn_pointer_arith = 0;
   cpp_opts->cpp_warn_traditional = warn_traditional = 0;
   flag_iso = 0;
   cpp_opts->cpp_warn_long_long = warn_long_long = 0;
   warn_cxx_compat = 0;
+  warn_overlength_strings = 0;
   return ret;
 }
 
@@ -1067,6 +1069,7 @@ restore_extension_diagnostics (int flags)
   flag_iso = (flags >> 3) & 1;
   cpp_opts->cpp_warn_long_long = warn_long_long = (flags >> 4) & 1;
   warn_cxx_compat = (flags >> 5) & 1;
+  warn_overlength_strings = (flags >> 6) & 1;
 }
 
 /* Possibly kinds of declarator to parse.  */
index 8d3e8477fad793437dac90450c59b3de3b16f171..6afb96daadc0820a614004361e901d09f5b09634 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-14  Tom Tromey  <tromey@redhat.com>
+
+       * gcc.dg/Woverlength-strings-pedantic-c89-ext.c: New file.
+       * gcc.dg/Woverlength-strings-pedantic-c90-ext.c: New file.
+       * gcc.dg/Woverlength-strings-pedantic-c99-ext.c: New file.
+
 2011-03-14  H.J. Lu  <hongjiu.lu@intel.com>
 
        * gcc.target/i386/builtin-copysign.c: Remove __LP64__ check.
diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-ext.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-ext.c
new file mode 100644 (file)
index 0000000..09b8079
--- /dev/null
@@ -0,0 +1,19 @@
+/* -Woverlength-strings complains about string constants which are too long
+   for the C standard's "minimum maximum" limits.  It is off by default,
+   but implied by -pedantic.  */
+
+/* { dg-options "-std=c89 -pedantic" } */
+
+#define TEN "xxxxxxxxxx"
+#define HUN TEN TEN TEN TEN TEN  TEN TEN TEN TEN TEN
+#define THO HUN HUN HUN HUN HUN  HUN HUN HUN HUN HUN
+
+/* C89's minimum-maximum is 509. */
+const char x510[] = __extension__ HUN HUN HUN HUN HUN TEN;
+
+/* C99's minimum-maximum is 4095.  */
+const char x4096[] = __extension__
+  THO THO THO THO     /* 4000 */
+  TEN TEN TEN TEN TEN /* 4050 */
+  TEN TEN TEN TEN     /* 4090 */
+  "123456";
diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-ext.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-ext.c
new file mode 100644 (file)
index 0000000..6fbaebe
--- /dev/null
@@ -0,0 +1,19 @@
+/* -Woverlength-strings complains about string constants which are too long
+   for the C standard's "minimum maximum" limits.  It is off by default,
+   but implied by -pedantic.  */
+
+/* { dg-options "-std=c90 -pedantic" } */
+
+#define TEN "xxxxxxxxxx"
+#define HUN TEN TEN TEN TEN TEN  TEN TEN TEN TEN TEN
+#define THO HUN HUN HUN HUN HUN  HUN HUN HUN HUN HUN
+
+/* C89's minimum-maximum is 509. */
+const char x510[] = __extension__ HUN HUN HUN HUN HUN TEN;
+
+/* C99's minimum-maximum is 4095.  */
+const char x4096[] = __extension__
+  THO THO THO THO     /* 4000 */
+  TEN TEN TEN TEN TEN /* 4050 */
+  TEN TEN TEN TEN     /* 4090 */
+  "123456";
diff --git a/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-ext.c b/gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-ext.c
new file mode 100644 (file)
index 0000000..93d5e46
--- /dev/null
@@ -0,0 +1,19 @@
+/* -Woverlength-strings complains about string constants which are too long
+   for the C standard's "minimum maximum" limits.  It is off by default,
+   but implied by -pedantic.  */
+
+/* { dg-options "-std=c99 -pedantic" } */
+
+#define TEN "xxxxxxxxxx"
+#define HUN TEN TEN TEN TEN TEN  TEN TEN TEN TEN TEN
+#define THO HUN HUN HUN HUN HUN  HUN HUN HUN HUN HUN
+
+/* C89's minimum-maximum is 509. */
+const char x510[] = HUN HUN HUN HUN HUN TEN;
+
+/* C99's minimum-maximum is 4095.  */
+const char x4096[] = __extension__
+  THO THO THO THO     /* 4000 */
+  TEN TEN TEN TEN TEN /* 4050 */
+  TEN TEN TEN TEN     /* 4090 */
+  "123456";