From debd777c82d83f61571a0d5aa8f548f2368f0528 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 10 Dec 2010 20:41:48 +0100 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 7 ++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/diagnostic/bitfld1.C | 13 +++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/diagnostic/bitfld1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4b060564412..53a064ef169 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-12-10 Jakub Jelinek + + 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 * decl.c (grokmethod): Test DECL_CLASS_SCOPE_P. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b75a13e2de3..1be0f979b1e 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 7bb46f3a7b5..2ef48e32851 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-10 Jakub Jelinek + + PR c++/46001 + * g++.dg/diagnostic/bitfld1.C: New test. + 2010-12-10 Sebastian Pop 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 00000000000..f75df38a495 --- /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 } -- 2.30.2