mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
df7ec09f12
commit
385ed708b2
|
|
@ -1,3 +1,8 @@
|
|||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
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.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
// 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);
|
||||
Loading…
Reference in New Issue