From 4e7c47870abdfabad382e87bd226f3b380517600 Mon Sep 17 00:00:00 2001 From: pinskia Date: Wed, 23 Jun 2004 20:53:17 +0000 Subject: [PATCH] 2004-06-23 Andrew Pinski * c-typeck.c (composite_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 * gcc.dg/c90-array-quals-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83567 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/c-typeck.c | 14 ++++++++++++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/c90-array-quals-2.c | 3 +++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/c90-array-quals-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c4f66348c2..d1e5799f331 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2004-06-23 Andrew Pinski + + * c-typeck.c (composite_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 * config/s390/s390.h (DEFAULT_MAIN_RETURN): Remove. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 6a4e1dbe42f..ad6a90a2cbb 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 fd9029a5599..facc58b22eb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-06-23 Andrew Pinski + + * gcc.dg/c90-array-quals-2.c: New test. + 2006-06-23 Nitin Yewale * 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 00000000000..7cb68c84683 --- /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[]; -- 2.11.0