From: Michael Meissner Date: Mon, 21 Mar 2011 20:59:02 +0000 (+0000) Subject: Backport fix for 48192 from trunk X-Git-Tag: releases/gcc-4.5.3~137 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb431bd002ff832a3a40bbaa1e50d4a0c5ca6b91;p=thirdparty%2Fgcc.git Backport fix for 48192 from trunk From-SVN: r171269 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c6991d19e359..8c190605083e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-03-21 Michael Meissner + + PR preprocessor/48192 + Backport from trunk + * gcc.target/powerpc/pr48192.c: New file. + 2011-03-18 Rainer Orth 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 index 000000000000..5159260857cb --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48192.c @@ -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; diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index b2c741fe2d00..703300db5968 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,4 +1,13 @@ -2011-11-04 Eric Botcazou +2011-03-21 Michael Meissner + + 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 Jakub Jelinek PR preprocessor/39213 diff --git a/libcpp/directives.c b/libcpp/directives.c index f0450a7afc03..461d0388cd1e 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -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)) { diff --git a/libcpp/expr.c b/libcpp/expr.c index 60cb2816a7ab..63cb9260cdd9 100644 --- a/libcpp/expr.c +++ b/libcpp/expr.c @@ -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; }