aboutsummaryrefslogtreecommitdiff
path: root/gcc/analyzer/svalue.cc
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2020-11-05 09:54:58 -0500
committerDavid Malcolm <dmalcolm@redhat.com>2020-11-05 09:54:58 -0500
commit54cbdb528df16686290ad26e2130a1896915639d (patch)
treee3d96c31bfdadf9e9d0a057e2c5f8b25b432dd17 /gcc/analyzer/svalue.cc
parentea937e7d8730b4faa18bc67413dbb14567be7390 (diff)
downloadgcc-54cbdb528df16686290ad26e2130a1896915639d.zip
gcc-54cbdb528df16686290ad26e2130a1896915639d.tar.gz
gcc-54cbdb528df16686290ad26e2130a1896915639d.tar.bz2
analyzer: fix ICE comparing COMPLEX_CSTs [PR97668]
gcc/analyzer/ChangeLog: PR analyzer/97668 * svalue.cc (cmp_cst): Handle COMPLEX_CST. gcc/testsuite/ChangeLog: PR analyzer/97668 * gcc.dg/analyzer/pr97668.c: New test. * gfortran.dg/analyzer/pr97668.f: New test.
Diffstat (limited to 'gcc/analyzer/svalue.cc')
-rw-r--r--gcc/analyzer/svalue.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc
index 18d9c37..e930452 100644
--- a/gcc/analyzer/svalue.cc
+++ b/gcc/analyzer/svalue.cc
@@ -291,6 +291,10 @@ cmp_cst (const_tree cst1, const_tree cst2)
return memcmp (TREE_REAL_CST_PTR (cst1),
TREE_REAL_CST_PTR (cst2),
sizeof (real_value));
+ case COMPLEX_CST:
+ if (int cmp_real = cmp_cst (TREE_REALPART (cst1), TREE_REALPART (cst2)))
+ return cmp_real;
+ return cmp_cst (TREE_IMAGPART (cst1), TREE_IMAGPART (cst2));
case VECTOR_CST:
if (int cmp_log2_npatterns
= ((int)VECTOR_CST_LOG2_NPATTERNS (cst1)