c-typeck.c (composite_type, [...]): Abort if we have type qualifiers at all.
authorAndrew Pinski <apinski@apple.com>
Wed, 23 Jun 2004 20:53:17 +0000 (20:53 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Wed, 23 Jun 2004 20:53:17 +0000 (13:53 -0700)
2004-06-23  Andrew Pinski  <apinski@apple.com>

        * c-typeck.c (composite_type, <case ARRAY_TYPE>): Abort if we have
        type qualifiers at all.
        If both of the type domains are null and the new element type is
        the same as one of the, return the one which the element type.
        matches.
        Do not call qualify_type on the new type.

2004-06-23  Andrew Pinski  <apinski@apple.com>

        * gcc.dg/c90-array-quals-2.c: New test.

From-SVN: r83567

gcc/ChangeLog
gcc/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/c90-array-quals-2.c [new file with mode: 0644]

index 3c4f66348c200db3fe5f6f53b0b9eaae836904b2..d1e5799f3317abcd5b08418c59fec3a42b2be6fe 100644 (file)
@@ -1,3 +1,12 @@
+2004-06-23  Andrew Pinski  <apinski@apple.com>
+
+       * c-typeck.c (composite_type, <case ARRAY_TYPE>): Abort if we have
+       type qualifiers at all.
+       If both of the type domains are null and the new element type is
+       the same as one of the, return the one which the element type.
+       matches.
+       Do not call qualify_type on the new type.
+
 2004-06-23  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * config/s390/s390.h (DEFAULT_MAIN_RETURN): Remove.
index 6a4e1dbe42f81a6009ad9c1a8a98620ae4bbfca7..ad6a90a2cbbe5b76bee802ecef673e356d469c99 100644 (file)
@@ -260,15 +260,25 @@ composite_type (tree t1, tree t2)
     case ARRAY_TYPE:
       {
        tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
+       
+       /* We should not have any type quals on arrays at all.  */
+       if (TYPE_QUALS (t1) || TYPE_QUALS (t2))
+         abort ();
+       
        /* Save space: see if the result is identical to one of the args.  */
        if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
          return build_type_attribute_variant (t1, attributes);
        if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
          return build_type_attribute_variant (t2, attributes);
+       
+       if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
+         return build_type_attribute_variant (t1, attributes);
+       if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
+         return build_type_attribute_variant (t2, attributes);
+       
        /* Merge the element types, and have a size if either arg has one.  */
        t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
-       t1 = build_type_attribute_variant (t1, attributes);
-       return qualify_type (t1, t2);
+       return build_type_attribute_variant (t1, attributes);
       }
 
     case FUNCTION_TYPE:
index fd9029a55993bf34b98dc929a4626c66af75b992..facc58b22eb322a6daba1a5f75999549cbdcc04a 100644 (file)
@@ -1,3 +1,7 @@
+2004-06-23  Andrew Pinski  <apinski@apple.com>
+
+       * gcc.dg/c90-array-quals-2.c: New test.
+
 2006-06-23  Nitin Yewale <NitinY@KPITCummins.com>
 
        * gcc.dg/kpice1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/c90-array-quals-2.c b/gcc/testsuite/gcc.dg/c90-array-quals-2.c
new file mode 100644 (file)
index 0000000..7cb68c8
--- /dev/null
@@ -0,0 +1,3 @@
+extern const char *const a[];
+extern const char *const a[];
+extern const char *const a[];