Commit 291de7fc by Richard Guenther Committed by Richard Biener

re PR c++/33887 (Reference to bitfield gets wrong value when optimizing)

2008-01-25  Richard Guenther  <rguenther@suse.de>

	PR c++/33887
	* decl.c (record_builtin_java_type): Make __java_boolean
	a variant of bool.
	* typeck.c (structural_comptypes): Move TYPE_FOR_JAVA check
	after TYPE_MAIN_VARIANT check.

From-SVN: r131840
parent 0288980f
2008-01-25 Richard Guenther <rguenther@suse.de>
PR c++/33887
* decl.c (record_builtin_java_type): Make __java_boolean
a variant of bool.
* typeck.c (structural_comptypes): Move TYPE_FOR_JAVA check
after TYPE_MAIN_VARIANT check.
2008-01-25 Jason Merrill <jason@redhat.com> 2008-01-25 Jason Merrill <jason@redhat.com>
* decl2.c (is_late_template_attribute): Don't defer attribute * decl2.c (is_late_template_attribute): Don't defer attribute
......
...@@ -3159,10 +3159,13 @@ record_builtin_java_type (const char* name, int size) ...@@ -3159,10 +3159,13 @@ record_builtin_java_type (const char* name, int size)
tree type, decl; tree type, decl;
if (size > 0) if (size > 0)
type = make_signed_type (size); type = make_signed_type (size);
else if (size == -1)
{ /* "__java_boolean". */
type = build_variant_type_copy (boolean_type_node);
}
else if (size > -32) else if (size > -32)
{ /* "__java_char" or ""__java_boolean". */ { /* "__java_char". */
type = make_unsigned_type (-size); type = make_unsigned_type (-size);
/*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
} }
else else
{ /* "__java_float" or ""__java_double". */ { /* "__java_float" or ""__java_double". */
......
...@@ -962,8 +962,6 @@ structural_comptypes (tree t1, tree t2, int strict) ...@@ -962,8 +962,6 @@ structural_comptypes (tree t1, tree t2, int strict)
if (TREE_CODE (t1) != ARRAY_TYPE if (TREE_CODE (t1) != ARRAY_TYPE
&& TYPE_QUALS (t1) != TYPE_QUALS (t2)) && TYPE_QUALS (t1) != TYPE_QUALS (t2))
return false; return false;
if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
return false;
/* Allow for two different type nodes which have essentially the same /* Allow for two different type nodes which have essentially the same
definition. Note that we already checked for equality of the type definition. Note that we already checked for equality of the type
...@@ -973,6 +971,9 @@ structural_comptypes (tree t1, tree t2, int strict) ...@@ -973,6 +971,9 @@ structural_comptypes (tree t1, tree t2, int strict)
&& TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)) && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
return true; return true;
if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
return false;
/* Compare the types. Break out if they could be the same. */ /* Compare the types. Break out if they could be the same. */
switch (TREE_CODE (t1)) switch (TREE_CODE (t1))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment