Commit 385ed708 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/72868 (Constexpr expressions mistreat case ranges)

	PR c++/72868
	* constexpr.c (label_matches): Handle case range expressions.

	* g++.dg/cpp1y/constexpr-switch4.C: New test.

From-SVN: r239379
parent df7ec09f
2016-08-11 Jakub Jelinek <jakub@redhat.com>
PR c++/72868
* constexpr.c (label_matches): Handle case range expressions.
2016-08-11 Jason Merrill <jason@redhat.com>
PR c++/73456
......
......@@ -3448,6 +3448,12 @@ label_matches (tree *jump_target, tree_stmt_iterator i,
{
if (!CASE_LOW (stmt))
default_label = i;
else if (CASE_HIGH (stmt))
{
if (tree_int_cst_le (CASE_LOW (stmt), *jump_target)
&& tree_int_cst_le (*jump_target, CASE_HIGH (stmt)))
return true;
}
else if (tree_int_cst_equal (*jump_target, CASE_LOW (stmt)))
return true;
}
......
2016-08-11 Jakub Jelinek <jakub@redhat.com>
PR c++/72868
* g++.dg/cpp1y/constexpr-switch4.C: New test.
2015-08-11 H.J. Lu <hongjiu.lu@intel.com>
* gcc.target/i386/pieces-memcpy-1.c: New test.
......
// PR c++/72868
// { dg-do compile }
// { dg-options "-std=gnu++14" }
constexpr int
foo (int i)
{
switch (i)
{
case 11 ... 12:
return 4;
case 0 ... 9:
return 3;
default:
return 7;
}
}
#define SA(X) static_assert((X),#X)
SA (foo (-1) == 7);
SA (foo (0) == 3);
SA (foo (3) == 3);
SA (foo (9) == 3);
SA (foo (10) == 7);
SA (foo (11) == 4);
SA (foo (12) == 4);
SA (foo (13) == 7);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment