diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-12-10 20:41:48 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-12-10 20:41:48 +0100 |
commit | debd777c82d83f61571a0d5aa8f548f2368f0528 (patch) | |
tree | 038eaf98add70e91a25ce1b0081d217aa9fa56dc | |
parent | cfee318d138c009b2eeb1038d00c6237a2fad4ee (diff) | |
download | gcc-debd777c82d83f61571a0d5aa8f548f2368f0528.zip gcc-debd777c82d83f61571a0d5aa8f548f2368f0528.tar.gz gcc-debd777c82d83f61571a0d5aa8f548f2368f0528.tar.bz2 |
re PR c++/46001 (diagnostic refers to type '__java_boolean')
PR c++/46001
* decl.c (record_builtin_java_type): Call build_distinct_type_copy
on build_nonstandard_integer_type result for __java_* types.
* g++.dg/diagnostic/bitfld1.C: New test.
From-SVN: r167698
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/diagnostic/bitfld1.C | 13 |
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4b06056..53a064e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-12-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/46001 + * decl.c (record_builtin_java_type): Call build_distinct_type_copy + on build_nonstandard_integer_type result for __java_* types. + 2010-12-10 Nathan Froyd <froydnj@codesourcery.com> * decl.c (grokmethod): Test DECL_CLASS_SCOPE_P. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b75a13e..1be0f97 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3330,17 +3330,22 @@ record_builtin_java_type (const char* name, int size) { tree type, decl; if (size > 0) - type = build_nonstandard_integer_type (size, 0); + { + type = build_nonstandard_integer_type (size, 0); + type = build_distinct_type_copy (type); + } else if (size > -32) { tree stype; /* "__java_char" or ""__java_boolean". */ type = build_nonstandard_integer_type (-size, 1); + type = build_distinct_type_copy (type); /* Get the signed type cached and attached to the unsigned type, so it doesn't get garbage-collected at "random" times, causing potential codegen differences out of different UIDs and different alias set numbers. */ stype = build_nonstandard_integer_type (-size, 0); + stype = build_distinct_type_copy (stype); TREE_CHAIN (type) = stype; /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/ } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7bb46f3..2ef48e3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/46001 + * g++.dg/diagnostic/bitfld1.C: New test. + 2010-12-10 Sebastian Pop <sebastian.pop@amd.com> PR tree-optimization/43023 diff --git a/gcc/testsuite/g++.dg/diagnostic/bitfld1.C b/gcc/testsuite/g++.dg/diagnostic/bitfld1.C new file mode 100644 index 0000000..f75df38 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/bitfld1.C @@ -0,0 +1,13 @@ +// PR c++/46001 +// { dg-do compile } + +struct S +{ + char *p; + unsigned char f : 1; +}; + +struct S s; +void *a = s.p | s.f; // { dg-error "unsigned char:1" } + +// { dg-bogus "__java_boolean" "" { target *-*-* } 11 } |