diff options
author | Jason Merrill <jason@redhat.com> | 2023-03-23 15:57:39 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2023-03-28 11:26:03 -0400 |
commit | 0e8fc610fb7112deb8c33c673a52983368dde9b7 (patch) | |
tree | deaa252b7d72c7ef6414e4a4089ebca4017b5256 /gcc/c-family | |
parent | 5a923516ae61ddc6dd863891db13189cbf392411 (diff) | |
download | gcc-0e8fc610fb7112deb8c33c673a52983368dde9b7.zip gcc-0e8fc610fb7112deb8c33c673a52983368dde9b7.tar.gz gcc-0e8fc610fb7112deb8c33c673a52983368dde9b7.tar.bz2 |
c-family: -Wsequence-point and COMPONENT_REF [PR107163]
The patch for PR91415 fixed -Wsequence-point to treat shifts and ARRAY_REF
as sequenced in C++17, and COMPONENT_REF as well. But this is unnecessary
for COMPONENT_REF, since the RHS is just a FIELD_DECL with no actual
evaluation, and in this testcase handling COMPONENT_REF as sequenced blows
up fast in a deep inheritance tree. Instead, look through it.
PR c++/107163
gcc/c-family/ChangeLog:
* c-common.cc (verify_tree): Don't use sequenced handling
for COMPONENT_REF.
gcc/testsuite/ChangeLog:
* g++.dg/warn/Wsequence-point-5.C: New test.
Diffstat (limited to 'gcc/c-family')
-rw-r--r-- | gcc/c-family/c-common.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index bfb950e..2b4c82f 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -2154,12 +2154,17 @@ verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp, case LSHIFT_EXPR: case RSHIFT_EXPR: - case COMPONENT_REF: case ARRAY_REF: if (cxx_dialect >= cxx17) goto sequenced_binary; goto do_default; + case COMPONENT_REF: + /* Treat as unary, the other operands aren't evaluated. */ + x = TREE_OPERAND (x, 0); + writer = 0; + goto restart; + default: do_default: /* For other expressions, simply recurse on their operands. |