aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/c-typeck.c14
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/c90-array-quals-2.c3
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3c4f663..d1e5799 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 6a4e1db..ad6a90a 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -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:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fd9029a..facc58b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..7cb68c8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/c90-array-quals-2.c
@@ -0,0 +1,3 @@
+extern const char *const a[];
+extern const char *const a[];
+extern const char *const a[];