aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-06-07 14:34:02 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-06-07 14:34:02 +0000
commitc3c79fc5a5bf930ae6a2ee17b39d5214cbabe861 (patch)
treee55d792d95d64cb1b5dd110c453a6833dcdc4518
parent28628ea69f5eea41ec4e678e7e66924a574943cb (diff)
downloadgcc-c3c79fc5a5bf930ae6a2ee17b39d5214cbabe861.zip
gcc-c3c79fc5a5bf930ae6a2ee17b39d5214cbabe861.tar.gz
gcc-c3c79fc5a5bf930ae6a2ee17b39d5214cbabe861.tar.bz2
decl.c (java_init_decl_processing): Call build_common_nodes, build_common_nodes_2 at the beginning.
2011-06-07 Richard Guenther <rguenther@suse.de> * decl.c (java_init_decl_processing): Call build_common_nodes, build_common_nodes_2 at the beginning. Remove then duplicate initializations. From-SVN: r174747
-rw-r--r--gcc/java/ChangeLog6
-rw-r--r--gcc/java/decl.c51
2 files changed, 19 insertions, 38 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index b29e9c2..b88b71f 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,5 +1,11 @@
2011-06-07 Richard Guenther <rguenther@suse.de>
+ * decl.c (java_init_decl_processing): Call build_common_nodes,
+ build_common_nodes_2 at the beginning. Remove then duplicate
+ initializations.
+
+2011-06-07 Richard Guenther <rguenther@suse.de>
+
* decl.c (java_init_decl_processing): Properly initialize
size_type_node.
diff --git a/gcc/java/decl.c b/gcc/java/decl.c
index 0ee2374..e4a3db2 100644
--- a/gcc/java/decl.c
+++ b/gcc/java/decl.c
@@ -566,13 +566,17 @@ java_init_decl_processing (void)
pushlevel (0); /* make the binding_level structure for global names */
global_binding_level = current_binding_level;
- /* The code here must be similar to build_common_tree_nodes{,_2} in
- tree.c, especially as to the order of initializing common nodes. */
- error_mark_node = make_node (ERROR_MARK);
- TREE_TYPE (error_mark_node) = error_mark_node;
+ /* Build common tree nodes, Java has an unsigned char. */
+ build_common_tree_nodes (false);
- /* Create sizetype first - needed for other types. */
- initialize_sizetypes ();
+ /* Build the rest of the common tree nodes. */
+ build_common_tree_nodes_2 (0);
+
+ /* ??? Now we continue and override some of the built types again
+ with Java specific types. As the above generated types are
+ supposed to match the targets C ABI this isn't really the way
+ to go and any Java specifics should _not_ use those global types
+ if the Java ABI does not match the C one. */
byte_type_node = make_signed_type (8);
pushdecl (build_decl (BUILTINS_LOCATION,
@@ -604,18 +608,6 @@ java_init_decl_processing (void)
TYPE_DECL, get_identifier ("unsigned long"),
unsigned_long_type_node));
- /* This is not a java type, however tree-dfa requires a definition for
- size_type_node. */
- if (strcmp (SIZE_TYPE, "unsigned int") == 0)
- size_type_node = make_unsigned_type (INT_TYPE_SIZE);
- else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
- size_type_node = make_unsigned_type (LONG_TYPE_SIZE);
- else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
- size_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
- else
- gcc_unreachable ();
- set_sizetype (size_type_node);
-
/* Define these next since types below may used them. */
integer_type_node = java_type_for_size (INT_TYPE_SIZE, 0);
integer_zero_node = build_int_cst (NULL_TREE, 0);
@@ -631,39 +623,22 @@ java_init_decl_processing (void)
= double_int_to_tree (unsigned_long_type_node,
double_int_setbit (double_int_zero, 64));
- size_zero_node = size_int (0);
- size_one_node = size_int (1);
- bitsize_zero_node = bitsize_int (0);
- bitsize_one_node = bitsize_int (1);
- bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
-
long_zero_node = build_int_cst (long_type_node, 0);
- void_type_node = make_node (VOID_TYPE);
pushdecl (build_decl (BUILTINS_LOCATION,
TYPE_DECL, get_identifier ("void"), void_type_node));
- layout_type (void_type_node); /* Uses size_zero_node */
-
- ptr_type_node = build_pointer_type (void_type_node);
- const_ptr_type_node
- = build_pointer_type (build_type_variant (void_type_node, 1, 0));
t = make_node (VOID_TYPE);
layout_type (t); /* Uses size_zero_node */
return_address_type_node = build_pointer_type (t);
- null_pointer_node = build_int_cst (ptr_type_node, 0);
-
- char_type_node = make_node (INTEGER_TYPE);
+ char_type_node = make_unsigned_type (16);
TYPE_STRING_FLAG (char_type_node) = 1;
- TYPE_PRECISION (char_type_node) = 16;
- fixup_unsigned_type (char_type_node);
pushdecl (build_decl (BUILTINS_LOCATION,
TYPE_DECL, get_identifier ("char"), char_type_node));
- boolean_type_node = make_node (BOOLEAN_TYPE);
- TYPE_PRECISION (boolean_type_node) = 1;
- fixup_unsigned_type (boolean_type_node);
+ boolean_type_node = make_unsigned_type (1);
+ TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
pushdecl (build_decl (BUILTINS_LOCATION,
TYPE_DECL, get_identifier ("boolean"),
boolean_type_node));