Fix for PR gcj/1404 and PR gcj/2332:
authorTom Tromey <tromey@redhat.com>
Sat, 7 Apr 2001 19:54:52 +0000 (19:54 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Sat, 7 Apr 2001 19:54:52 +0000 (19:54 +0000)
2001-04-06  Tom Tromey  <tromey@redhat.com>
    Alexandre Petit-Bianco  <apbianco@redhat.com>

Fix for PR gcj/1404 and PR gcj/2332:
* parse.y (build_array_from_name): If we use the type_wfl then
accumulate dimensions from the original type as well.
(build_unresolved_array_type): Don't modify TYPE_OR_WFL in place.

Co-Authored-By: Alexandre Petit-Bianco <apbianco@redhat.com>
From-SVN: r41178

gcc/java/ChangeLog
gcc/java/parse.y

index 453641b915e8feba9bb5887372e71b0421a68861..6fa18d7d7da0b9eabf00227b732096aeb82c0857 100644 (file)
@@ -1,3 +1,11 @@
+2001-04-06  Tom Tromey  <tromey@redhat.com>
+           Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       Fix for PR gcj/1404 and PR gcj/2332:
+       * parse.y (build_array_from_name): If we use the type_wfl then
+       accumulate dimensions from the original type as well.
+       (build_unresolved_array_type): Don't modify TYPE_OR_WFL in place.
+
 2001-04-06  Tom Tromey  <tromey@redhat.com>
 
        * parse.y (analyze_clinit_body): Return true if the second operand
index c0b9100ad05eba27a64be3d6e202f52c2bb9cee9..5bddc104a215ecacac2b49e36a28f39001009258 100644 (file)
@@ -3255,6 +3255,8 @@ build_array_from_name (type, type_wfl, name, ret_name)
   /* If we have, then craft a new type for this variable */
   if (more_dims)
     {
+      tree save = type;
+
       name = get_identifier (&string [more_dims]);
 
       /* If we have a pointer, use its type */
@@ -3273,7 +3275,14 @@ build_array_from_name (type, type_wfl, name, ret_name)
          is already an array on an unresolved type, and we just keep
          on adding dimensions) */
       else if (type_wfl)
-       type = type_wfl;
+       {
+         int i = 0;
+         type = type_wfl;
+         string = IDENTIFIER_POINTER (TYPE_NAME (save));
+         while (string[i]  == '[')
+           ++i;
+         more_dims += i;
+       }
 
       /* Add all the dimensions */
       while (more_dims--)
@@ -3313,8 +3322,10 @@ build_unresolved_array_type (type_or_wfl)
                 IDENTIFIER_POINTER (EXPR_WFL_NODE (type_or_wfl)),
                 IDENTIFIER_LENGTH (EXPR_WFL_NODE (type_or_wfl)));
   ptr = obstack_finish (&temporary_obstack);
-  EXPR_WFL_NODE (type_or_wfl) = get_identifier (ptr);
-  return type_or_wfl;
+  return build_expr_wfl (get_identifier (ptr),
+                        EXPR_WFL_FILENAME (type_or_wfl),
+                        EXPR_WFL_LINENO (type_or_wfl),
+                        EXPR_WFL_COLNO (type_or_wfl));
 }
 
 static void