re PR c++/65556 (ICE: verify_gimple failed (type precision mismatch in switch statement))
PR c++/65556 * semantics.c (finish_switch_cond): If the unlowered type is not an enum, use the type of the condition. * c-c++-common/pr65556.c: New test. From-SVN: r221738
This commit is contained in:
parent
0b7dccc63e
commit
5964a3a672
4 changed files with 36 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-03-27 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/65556
|
||||
* semantics.c (finish_switch_cond): If the unlowered type is not an
|
||||
enum, use the type of the condition.
|
||||
|
||||
2015-03-27 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/65509
|
||||
|
|
|
@ -1165,6 +1165,8 @@ finish_switch_cond (tree cond, tree switch_stmt)
|
|||
}
|
||||
/* We want unlowered type here to handle enum bit-fields. */
|
||||
orig_type = unlowered_expr_type (cond);
|
||||
if (TREE_CODE (orig_type) != ENUMERAL_TYPE)
|
||||
orig_type = TREE_TYPE (cond);
|
||||
if (cond != error_mark_node)
|
||||
{
|
||||
/* Warn if the condition has boolean value. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-03-27 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/65556
|
||||
* c-c++-common/pr65556.c: New test.
|
||||
|
||||
2015-03-27 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/65600
|
||||
|
|
23
gcc/testsuite/c-c++-common/pr65556.c
Normal file
23
gcc/testsuite/c-c++-common/pr65556.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* PR c++/65556 */
|
||||
/* { dg-do compile } */
|
||||
|
||||
struct S
|
||||
{
|
||||
long l: 1;
|
||||
long l2: 41;
|
||||
unsigned long ul: 1;
|
||||
unsigned long ul2: 41;
|
||||
} s;
|
||||
|
||||
void
|
||||
fn ()
|
||||
{
|
||||
switch (s.l)
|
||||
case 0:;
|
||||
switch (s.ul)
|
||||
case 0:;
|
||||
switch (s.l2)
|
||||
case 0:;
|
||||
switch (s.ul2)
|
||||
case 0:;
|
||||
}
|
Loading…
Add table
Reference in a new issue