On Thu, May 14, 2026 at 01:15:21AM -0700, Andrew Pinski wrote:
> This reverts the group_case_labels_stmt part of r8-546-gca4d2851687875.
> This is placed in the wrong location to remove the case statements that go
> directly to __builtin_unreachable. In fact the removal of the case statements
> make us lose optimizations in some cases (Wuninitialized-pr107919-1.C for
> one).
>
> Also this fixes PR 125290 by no longer leaving around a switch which just
> has a default case.
>
> Bootstrapped and tested on x86_64-linux-gnu.
>
> PR tree-optimization/125290
>
> gcc/ChangeLog:
>
> * tree-cfg.cc (group_case_labels_stmt): Remove code that was
> added to remove `cases` that goto blocks of unreachable.
> * tree-ssa-forwprop.cc (optimize_unreachable): Remove the
> comment about switch cases being handled.
>
> gcc/testsuite/ChangeLog:
>
> * g++.dg/warn/Wuninitialized-pr107919-1.C: Remove xfail.
> * gcc.dg/analyzer/taint-assert.c: Update for the non-removal
> of block containing unreachable.
> * gcc.dg/torture/pr125290-1.c: New test.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
> .../g++.dg/warn/Wuninitialized-pr107919-1.C | 2 +-
> gcc/testsuite/gcc.dg/analyzer/taint-assert.c | 4 +-
> gcc/testsuite/gcc.dg/torture/pr125290-1.c | 40 +++++++++++++++
> gcc/tree-cfg.cc | 51 +------------------
> gcc/tree-ssa-forwprop.cc | 3 +-
> 5 files changed, 46 insertions(+), 54 deletions(-)
> create mode 100644 gcc/testsuite/gcc.dg/torture/pr125290-1.c
>
> diff --git a/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
> b/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
> index 049fa4d307a..b3ed4628bdd 100644
> --- a/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
> +++ b/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
> @@ -14,4 +14,4 @@ void do_something(void* storage)
> std::swap(event, swappedValue);
> }
>
> -// { dg-bogus "may be used uninitialized" "" { xfail *-*-* } 0 }
> +// { dg-bogus "may be used uninitialized" "" 0 }
This is wrong:
ERROR: g++.dg/warn/Wuninitialized-pr107919-1.C -std=gnu++98: syntax error in
target selector "0" for " dg-bogus 17 "may be used uninitialized" "" 0 "
Fixed by:
gcc/testsuite/ChangeLog:
* g++.dg/warn/Wuninitialized-pr107919-1.C: Fix a dg-bogus.
---
gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
b/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
index b3ed4628bdd..931b4648e00 100644
--- a/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
+++ b/gcc/testsuite/g++.dg/warn/Wuninitialized-pr107919-1.C
@@ -14,4 +14,4 @@ void do_something(void* storage)
std::swap(event, swappedValue);
}
-// { dg-bogus "may be used uninitialized" "" 0 }
+// { dg-bogus "may be used uninitialized" "" { target *-*-* } 0 }
base-commit: f108e23d2bff50d0ee8cf0d25a08be5432b702b6
--
2.54.0