Revert r263947.

2018-10-22  Martin Liska  <mliska@suse.cz>

  PR tree-optimization/87686
	Revert
	2018-08-29  Martin Liska  <mliska@suse.cz>

	* tree-switch-conversion.c (switch_conversion::expand):
	Strenghten assumption about gswitch statements.
2018-10-22  Martin Liska  <mliska@suse.cz>

  PR tree-optimization/87686
	* g++.dg/tree-ssa/pr87686.C: New test.

From-SVN: r265388
This commit is contained in:
Martin Liska 2018-10-22 15:09:33 +02:00 committed by Martin Liska
parent c7acc2964e
commit d78bcb133d
4 changed files with 43 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2018-10-22 Martin Liska <mliska@suse.cz>
PR tree-optimization/87686
Revert
2018-08-29 Martin Liska <mliska@suse.cz>
* tree-switch-conversion.c (switch_conversion::expand):
Strenghten assumption about gswitch statements.
2018-10-22 Martin Liska <mliska@suse.cz>
* ipa-icf.c (sem_item::compare_attributes): Remove.

View File

@ -1,3 +1,8 @@
2018-10-22 Martin Liska <mliska@suse.cz>
PR tree-optimization/87686
* g++.dg/tree-ssa/pr87686.C: New test.
2018-10-22 Jakub Jelinek <jakub@redhat.com>
* g++.target/i386/i386.exp: Use g++-dg-runtest to iterate

View File

@ -0,0 +1,21 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
class a {
public:
enum b { c, g, d, e } f;
a(b h) : f(h) {}
a i() {
switch (f) {
case d:
return c;
case e:
return g;
}
} /* { dg-warning "control reaches end of non-void function" } */
};
struct k {
a j;
k l() { j.i(); } /* { dg-warning "no return statement in function returning non-void" } */
};
void m(k h) { h.l(); }

View File

@ -913,7 +913,14 @@ switch_conversion::expand (gswitch *swtch)
/* Group case labels so that we get the right results from the heuristics
that decide on the code generation approach for this switch. */
m_cfg_altered |= group_case_labels_stmt (swtch);
gcc_assert (gimple_switch_num_labels (swtch) >= 2);
/* If this switch is now a degenerate case with only a default label,
there is nothing left for us to do. */
if (gimple_switch_num_labels (swtch) < 2)
{
m_reason = "switch is a degenerate case";
return;
}
collect (swtch);