+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.
+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
--- /dev/null
+/* { 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(); }
/* 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);