]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Backport fix for 48192 from trunk
authorMichael Meissner <meissner@gcc.gnu.org>
Mon, 21 Mar 2011 20:59:02 +0000 (20:59 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Mon, 21 Mar 2011 20:59:02 +0000 (20:59 +0000)
From-SVN: r171269

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr48192.c [new file with mode: 0644]
libcpp/ChangeLog
libcpp/directives.c
libcpp/expr.c

index c6991d19e359a123cffee2992510696d147f1b1d..8c190605083e46af892961b85b926b7d9f6d774d 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR preprocessor/48192
+       Backport from trunk
+       * gcc.target/powerpc/pr48192.c: New file.
+
 2011-03-18  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        PR middle-end/47405
diff --git a/gcc/testsuite/gcc.target/powerpc/pr48192.c b/gcc/testsuite/gcc.target/powerpc/pr48192.c
new file mode 100644 (file)
index 0000000..5159260
--- /dev/null
@@ -0,0 +1,49 @@
+/* { dg-do compile } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O3 -mcpu=power7 -std=gnu89" } */
+
+/* Make sure that the conditional macros vector, bool, and pixel are not
+   considered as being defined.  */
+
+#ifdef bool
+#error "bool is considered defined"
+#endif
+
+#ifdef vector
+#error "vector is considered defined"
+#endif
+
+#ifdef pixel
+#error "pixel is condsidered defined"
+#endif
+
+#if defined(bool)
+#error "bool is considered defined"
+#endif
+
+#if defined(vector)
+#error "vector is considered defined"
+#endif
+
+#if defined(pixel)
+#error "pixel is condsidered defined"
+#endif
+
+#ifndef bool
+#else
+#error "bool is considered defined"
+#endif
+
+#ifndef vector
+#else
+#error "vector is considered defined"
+#endif
+
+#ifndef pixel
+#else
+#error "pixel is condsidered defined"
+#endif
+
+#define bool long double
+bool pixel = 0;
index b2c741fe2d008ee547e4889f171865a97ed87b25..703300db59686efd31bcc71c3b43325dead72bf1 100644 (file)
@@ -1,4 +1,13 @@
-2011-11-04  Eric Botcazou  <ebotcazou@adacore.com>
+2011-03-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR preprocessor/48192
+       Backport from trunk
+       * directives.c (do_ifdef): Do not consider conditional macros as
+       being defined.
+       (do_ifndef): Ditto.
+       * expr.c (parse_defined): Ditto.
+
+2011-01-04  Eric Botcazou  <ebotcazou@adacore.com>
             Jakub Jelinek  <jakub@redhat.com>
 
        PR preprocessor/39213
index f0450a7afc03410ad8535e9e01455777e048f843..461d0388cd1e57b51aa8965d2f7dcbc8241cf266 100644 (file)
@@ -1793,7 +1793,12 @@ do_ifdef (cpp_reader *pfile)
 
       if (node)
        {
-         skip = node->type != NT_MACRO;
+         /* Do not treat conditional macros as being defined.  This is due to
+            the powerpc and spu ports using conditional macros for 'vector',
+            'bool', and 'pixel' to act as conditional keywords.  This messes
+            up tests like #ifndef bool.  */
+         skip = (node->type != NT_MACRO
+                 || ((node->flags & NODE_CONDITIONAL) != 0));
          _cpp_mark_macro_used (node);
          if (!(node->flags & NODE_USED))
            {
@@ -1831,7 +1836,12 @@ do_ifndef (cpp_reader *pfile)
 
       if (node)
        {
-         skip = node->type == NT_MACRO;
+         /* Do not treat conditional macros as being defined.  This is due to
+            the powerpc and spu ports using conditional macros for 'vector',
+            'bool', and 'pixel' to act as conditional keywords.  This messes
+            up tests like #ifndef bool.  */
+         skip = (node->type == NT_MACRO
+                 && ((node->flags & NODE_CONDITIONAL) == 0));
          _cpp_mark_macro_used (node);
          if (!(node->flags & NODE_USED))
            {
index 60cb2816a7ab9d3fed07c567362e62dea5ef24c0..63cb9260cdd94becba8216a5e027e00adf76ce4d 100644 (file)
@@ -711,10 +711,15 @@ parse_defined (cpp_reader *pfile)
 
   pfile->state.prevent_expansion--;
 
+  /* Do not treat conditional macros as being defined.  This is due to the
+     powerpc and spu ports using conditional macros for 'vector', 'bool', and
+     'pixel' to act as conditional keywords.  This messes up tests like #ifndef
+     bool.  */
   result.unsignedp = false;
   result.high = 0;
   result.overflow = false;
-  result.low = node && node->type == NT_MACRO;
+  result.low = (node && node->type == NT_MACRO
+               && (node->flags & NODE_CONDITIONAL) == 0);
   return result;
 }