aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-05-29 09:06:35 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2009-05-29 09:06:35 +0200
commit58195b740ddfdb337f459d3660adfe60494747db (patch)
tree96dbd86211f5253bdf919bc13d504c90dced6235 /gcc
parent055df276d4e2b36c030223f39cd84743aaac8def (diff)
downloadgcc-58195b740ddfdb337f459d3660adfe60494747db.zip
gcc-58195b740ddfdb337f459d3660adfe60494747db.tar.gz
gcc-58195b740ddfdb337f459d3660adfe60494747db.tar.bz2
re PR target/40017 (stdbool.h/altivec.h)
PR target/40017 * config/rs6000/rs6000-c.c (_Bool_keyword): New variable. (altivec_categorize_keyword, init_vector_keywords, rs6000_cpu_cpp_builtins): Define _Bool as conditional macro similar to bool. * gcc.target/powerpc/altivec-types-1.c: Don't expect error for __vector _Bool. * gcc.target/powerpc/altivec-30.c: New test. * gcc.target/powerpc/altivec-31.c: New test. From-SVN: r147970
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000-c.c8
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.target/powerpc/altivec-30.c32
-rw-r--r--gcc/testsuite/gcc.target/powerpc/altivec-31.c29
-rw-r--r--gcc/testsuite/gcc.target/powerpc/altivec-types-1.c2
6 files changed, 86 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e788ff6..f368de2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2009-05-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/40017
+ * config/rs6000/rs6000-c.c (_Bool_keyword): New variable.
+ (altivec_categorize_keyword, init_vector_keywords,
+ rs6000_cpu_cpp_builtins): Define _Bool as conditional macro
+ similar to bool.
+
2009-05-29 Kai Tietz <kai.tietz@onevision.com>
* tree.c (handle_dll_attribute): Check if node is
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index c7adcdb..33bbd65 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -91,6 +91,7 @@ static GTY(()) tree __pixel_keyword;
static GTY(()) tree pixel_keyword;
static GTY(()) tree __bool_keyword;
static GTY(()) tree bool_keyword;
+static GTY(()) tree _Bool_keyword;
/* Preserved across calls. */
static tree expand_bool_pixel;
@@ -111,6 +112,9 @@ altivec_categorize_keyword (const cpp_token *tok)
if (ident == C_CPP_HASHNODE (bool_keyword))
return C_CPP_HASHNODE (__bool_keyword);
+ if (ident == C_CPP_HASHNODE (_Bool_keyword))
+ return C_CPP_HASHNODE (__bool_keyword);
+
return ident;
}
@@ -141,6 +145,9 @@ init_vector_keywords (void)
bool_keyword = get_identifier ("bool");
C_CPP_HASHNODE (bool_keyword)->flags |= NODE_CONDITIONAL;
+
+ _Bool_keyword = get_identifier ("_Bool");
+ C_CPP_HASHNODE (_Bool_keyword)->flags |= NODE_CONDITIONAL;
}
/* Called to decide whether a conditional macro should be expanded.
@@ -295,6 +302,7 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
builtin_define ("vector=vector");
builtin_define ("pixel=pixel");
builtin_define ("bool=bool");
+ builtin_define ("_Bool=_Bool");
init_vector_keywords ();
/* Enable context-sensitive macros. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b0706c5..2c1fc03 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2009-05-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/40017
+ * gcc.target/powerpc/altivec-types-1.c: Don't expect error for
+ __vector _Bool.
+ * gcc.target/powerpc/altivec-30.c: New test.
+ * gcc.target/powerpc/altivec-31.c: New test.
+
2009-05-28 Richard Guenther <rguenther@suse.de>
* gcc.dg/tree-ssa/ssa-fre-26.c: New testcase.
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-30.c b/gcc/testsuite/gcc.target/powerpc/altivec-30.c
new file mode 100644
index 0000000..9978319
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-30.c
@@ -0,0 +1,32 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+#include <stdbool.h>
+#include <altivec.h>
+
+#define f0(type) void x0##type (vector bool type x) { }
+f0 (int)
+
+#define f1(v, type) void x1##type (v bool type x) { }
+f1 (vector, int)
+
+#define f2(b, type) void x2##type (vector b type x) { }
+f2 (bool, int)
+
+#define f3(v, b, type) void x3##type (v b type x) { }
+f3 (vector, bool, int)
+
+#define f4(v, b, type) void x4##type (v type b x) { }
+f4 (vector, bool, int)
+
+#define B bool
+#define I int
+#define BI bool int
+#define VBI vector bool int
+
+vector bool int a;
+vector B int b;
+vector B I c;
+vector BI d;
+VBI e;
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-31.c b/gcc/testsuite/gcc.target/powerpc/altivec-31.c
new file mode 100644
index 0000000..233efe1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-31.c
@@ -0,0 +1,29 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+#define f0(type) void x0##type (vector _Bool type x) { }
+f0 (int)
+
+#define f1(v, type) void x1##type (v _Bool type x) { }
+f1 (vector, int)
+
+#define f2(b, type) void x2##type (vector b type x) { }
+f2 (_Bool, int)
+
+#define f3(v, b, type) void x3##type (v b type x) { }
+f3 (vector, _Bool, int)
+
+#define f4(v, b, type) void x4##type (v type b x) { }
+f4 (vector, _Bool, int)
+
+#define B _Bool
+#define I int
+#define BI _Bool int
+#define VBI vector _Bool int
+
+vector _Bool int a;
+vector B int b;
+vector B I c;
+vector BI d;
+VBI e;
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-types-1.c b/gcc/testsuite/gcc.target/powerpc/altivec-types-1.c
index d293042..41de952 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-types-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-types-1.c
@@ -24,6 +24,7 @@ __vector unsigned vuj;
__vector signed vsj;
__vector __bool vbj;
__vector float vf;
+__vector _Bool vb;
/* These should be rejected as invalid AltiVec types. */
@@ -37,7 +38,6 @@ __vector signed long long int vslli; /* { dg-error "AltiVec types" "" } */
__vector __bool long long int vblli; /* { dg-error "AltiVec types" "" } */
__vector double vd1; /* { dg-error "AltiVec types" "" } */
__vector long double vld; /* { dg-error "AltiVec types" "" } */
-__vector _Bool vb; /* { dg-error "AltiVec types" "" } */
__vector _Complex float vcf; /* { dg-error "AltiVec types" "" } */
__vector _Complex double vcd; /* { dg-error "AltiVec types" "" } */
__vector _Complex long double vcld; /* { dg-error "AltiVec types" "" } */