OSDN Git Service

PR c++/46001
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Dec 2010 19:41:48 +0000 (19:41 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Dec 2010 19:41:48 +0000 (19:41 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167698 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/diagnostic/bitfld1.C [new file with mode: 0644]

index 4b06056..53a064e 100644 (file)
@@ -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.
index b75a13e..1be0f97 100644 (file)
@@ -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);*/
     }
index 7bb46f3..2ef48e3 100644 (file)
@@ -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 (file)
index 0000000..f75df38
--- /dev/null
@@ -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 }