decl.c (java_init_decl_processing): Call build_common_nodes, build_common_nodes_2...
authorRichard Guenther <rguenther@suse.de>
Tue, 7 Jun 2011 14:34:02 +0000 (14:34 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 7 Jun 2011 14:34:02 +0000 (14:34 +0000)
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

gcc/java/ChangeLog
gcc/java/decl.c

index b29e9c29f006fb564471729b10c6b1c48e587b8d..b88b71f9fb862d57599ed78e93b8ff27592b815c 100644 (file)
@@ -1,3 +1,9 @@
+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
index 0ee23742a166a4e2645d94fe68b26233583fdbcb..e4a3db240d4f216b35b558ecedf9b8a57c321bfd 100644 (file)
@@ -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));