aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2009-03-06 09:10:46 +0000
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2009-03-06 09:10:46 +0000
commitda748ee51ae995e8f94d3cdcc7187dea08c662ac (patch)
tree6413f929ee7d705cbadc88abe114c1e1a026488b /gcc
parentb304527910c2e947c172e6a7d7ff4da82a8f2c03 (diff)
* decl.c (record_builtin_java_type): Use canonicalized integer
types. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144664 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c14
2 files changed, 16 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 31a626bc1ad..720663918d4 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2009-03-06 Alexandre Oliva <aoliva@redhat.com>
+
+ * decl.c (record_builtin_java_type): Use canonicalized integer
+ types.
+
2009-03-04 Jason Merrill <jason@redhat.com>
PR c++/38908
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index ddd133ae2ea..4ed342514b8 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3168,10 +3168,18 @@ record_builtin_java_type (const char* name, int size)
{
tree type, decl;
if (size > 0)
- type = make_signed_type (size);
+ type = build_nonstandard_integer_type (size, 0);
else if (size > -32)
- { /* "__java_char" or ""__java_boolean". */
- type = make_unsigned_type (-size);
+ {
+ tree stype;
+ /* "__java_char" or ""__java_boolean". */
+ type = build_nonstandard_integer_type (-size, 1);
+ /* 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);
+ TREE_CHAIN (type) = stype;
/*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
}
else