aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-03-27 10:00:47 +0100
committerJakub Jelinek <jakub@redhat.com>2020-03-27 10:00:47 +0100
commit72809d6fe8e085440403ce125c51d01d6e7512b0 (patch)
tree58c817b44e0efb32a29324c34108ce76a61ebdfe /gcc/testsuite/g++.dg
parent06d5d63d9944691bb4286e5f6b2422cc97148336 (diff)
downloadgcc-72809d6fe8e085440403ce125c51d01d6e7512b0.zip
gcc-72809d6fe8e085440403ce125c51d01d6e7512b0.tar.gz
gcc-72809d6fe8e085440403ce125c51d01d6e7512b0.tar.bz2
c++: Handle COMPOUND_EXPRs in ocp_convert [PR94339]
My recent change to get_narrower/warnings_for_convert_and_check broke the following testcase, warnings_for_convert_and_check is upset that expr is a COMPOUND_EXPR with INTEGER_CST at the rightmost operand, while result is a COMPOUND_EXPR with a NOP_EXPR of INTEGER_CST at the rightmost operand, it expects such conversions to be simplified. The easiest fix seems to be to handle COMPOUND_EXPRs in ocp_convert too, by converting the rightmost operand and recreating COMPOUND_EXPR(s) if that changed. The attr-copy-2.C change is a workaround for PR94346, where we now ICE on the testcase, while previously we'd ICE only if it contained a comma expression at the outer level rather than cast of a COMPOUND_EXPR to something. I'll defer that to Martin. 2020-03-27 Jakub Jelinek <jakub@redhat.com> PR c++/94339 * cvt.c (ocp_convert): Handle COMPOUND_EXPR by recursion on the second operand and creating a new COMPOUND_EXPR if anything changed. * g++.dg/other/pr94339.C: New test. * g++.dg/ext/attr-copy-2.C: Comment out failing tests due to PR94346.
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r--gcc/testsuite/g++.dg/ext/attr-copy-2.C8
-rw-r--r--gcc/testsuite/g++.dg/other/pr94339.C11
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/testsuite/g++.dg/ext/attr-copy-2.C b/gcc/testsuite/g++.dg/ext/attr-copy-2.C
index 7776959..7c47a15 100644
--- a/gcc/testsuite/g++.dg/ext/attr-copy-2.C
+++ b/gcc/testsuite/g++.dg/ext/attr-copy-2.C
@@ -36,8 +36,8 @@ typedef struct C
ATTR (copy (*(struct A *)(0, 1))) long m_xpa_0_1;
ATTR (copy (((struct A *)0)[0])) short m_arpa_0;
- ATTR (copy (((struct A *)(1, 0))[0])) int m_arpa_1_0;
- ATTR (copy (((struct A *)(0, 1))[0])) long m_arpa_0_1;
+// ATTR (copy (((struct A *)(1, 0))[0])) int m_arpa_1_0;
+// ATTR (copy (((struct A *)(0, 1))[0])) long m_arpa_0_1;
ATTR (copy (a)) short m_a;
ATTR (copy (b.a)) int m_b_a;
@@ -86,8 +86,8 @@ static_assert (__builtin_has_attribute (((C*)0)->m_xpa_0_1, packed));
static_assert (__builtin_has_attribute (((C*)0)->m_ra, packed));
static_assert (__builtin_has_attribute (((C*)0)->m_arpa_0, packed));
-static_assert (__builtin_has_attribute (((C*)0)->m_arpa_1_0, packed));
-static_assert (__builtin_has_attribute (((C*)0)->m_arpa_0_1, packed));
+//static_assert (__builtin_has_attribute (((C*)0)->m_arpa_1_0, packed));
+//static_assert (__builtin_has_attribute (((C*)0)->m_arpa_0_1, packed));
static_assert (__builtin_has_attribute (((C*)0)->m_a, packed));
static_assert (__builtin_has_attribute (((C*)0)->m_b_a, packed));
diff --git a/gcc/testsuite/g++.dg/other/pr94339.C b/gcc/testsuite/g++.dg/other/pr94339.C
new file mode 100644
index 0000000..3892d78
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/pr94339.C
@@ -0,0 +1,11 @@
+// PR c++/94339
+// { dg-do compile }
+
+unsigned a;
+void bar ();
+
+unsigned
+foo (bool x)
+{
+ return x ? bar (), -1 : a;
+}