aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-family
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2018-10-08 08:16:13 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2018-10-08 08:16:13 +0000
commit8656dafa39de8e537940433220e8f5db3bf7a614 (patch)
tree165aa7158bf1941139ea902e141af4b3c83f48ba /gcc/c-family
parent090680870b633853e40a750036dab2b3df63dd18 (diff)
downloadgcc-8656dafa39de8e537940433220e8f5db3bf7a614.zip
gcc-8656dafa39de8e537940433220e8f5db3bf7a614.tar.gz
gcc-8656dafa39de8e537940433220e8f5db3bf7a614.tar.bz2
Don't ICE on vectors of enums (PR 87286)
We've traditionally allowed vectors of enums (not sure if that's deliberate) but vector_types_compatible_elements_p checked for INTEGER_TYPE rather than INTEGRAL_TYPE_P. 2018-10-08 Richard Sandiford <richard.sandiford@arm.com> gcc/c-family/ PR c/87286 * c-common.c (vector_types_compatible_elements_p): Use INTEGRAL_TYPE_P instead of checking only for INTEGER_TYPE. gcc/testsuite/ PR c/87286 * gcc.dg/pr87286.c: New test. From-SVN: r264913
Diffstat (limited to 'gcc/c-family')
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-common.c9
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index b6ff1f7..6307337 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2018-10-08 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR c/87286
+ * c-common.c (vector_types_compatible_elements_p): Use
+ INTEGRAL_TYPE_P instead of checking only for INTEGER_TYPE.
+
2018-10-04 Vinay Kumar <vinay.kumar@blackfigtech.com>
* c-attribs.c (get_priority): Add a warning flag warn_prio_ctor_dtor
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 10a8bc2..c0198e1 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -7465,8 +7465,11 @@ vector_types_compatible_elements_p (tree t1, tree t2)
enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
- gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
- && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
+ gcc_assert ((INTEGRAL_TYPE_P (t1)
+ || c1 == REAL_TYPE
+ || c1 == FIXED_POINT_TYPE)
+ && (INTEGRAL_TYPE_P (t2)
+ || c2 == REAL_TYPE
|| c2 == FIXED_POINT_TYPE));
t1 = c_common_signed_type (t1);
@@ -7476,7 +7479,7 @@ vector_types_compatible_elements_p (tree t1, tree t2)
if (t1 == t2)
return true;
if (opaque && c1 == c2
- && (c1 == INTEGER_TYPE || c1 == REAL_TYPE)
+ && (INTEGRAL_TYPE_P (t1) || c1 == REAL_TYPE)
&& TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
return true;
return false;