diff options
author | Marek Polacek <polacek@redhat.com> | 2015-11-16 20:16:57 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2015-11-16 20:16:57 +0000 |
commit | 0f62c7a0cc5b2da41f98c338185dbf036ad468ff (patch) | |
tree | 30eed2e1b014356c564af5f4e3c271358eb2fabc /gcc | |
parent | 3e6ab828444aad891d84bf68ba02581fba28f80b (diff) | |
download | gcc-0f62c7a0cc5b2da41f98c338185dbf036ad468ff.zip gcc-0f62c7a0cc5b2da41f98c338185dbf036ad468ff.tar.gz gcc-0f62c7a0cc5b2da41f98c338185dbf036ad468ff.tar.bz2 |
re PR c++/68362 (ICE: tree check: expected integer_cst, have nop_expr in get_val, at tree.h:5157)
PR c++/68362
* c-common.c (check_case_bounds): Fold low and high cases.
* g++.dg/delayedfold/switch-1.C: New test.
From-SVN: r230435
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-family/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/delayedfold/switch-1.C | 19 |
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index e9851aa..3151e34 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,5 +1,10 @@ 2015-11-16 Marek Polacek <polacek@redhat.com> + PR c++/68362 + * c-common.c (check_case_bounds): Fold low and high cases. + +2015-11-16 Marek Polacek <polacek@redhat.com> + * c-ada-spec.c (dump_ada_template): Use RECORD_OR_UNION_TYPE_P. * c-common.c (c_common_get_alias_set): Likewise. (handle_visibility_attribute): Likewise. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index a062f81..06d857c 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -3769,6 +3769,10 @@ check_case_bounds (location_t loc, tree type, tree orig_type, min_value = TYPE_MIN_VALUE (orig_type); max_value = TYPE_MAX_VALUE (orig_type); + /* We'll really need integer constants here. */ + case_low = fold (case_low); + case_high = fold (case_high); + /* Case label is less than minimum for type. */ if (tree_int_cst_compare (case_low, min_value) < 0 && tree_int_cst_compare (case_high, min_value) < 0) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac40be9..0f6a593 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-11-16 Marek Polacek <polacek@redhat.com> + + PR c++/68362 + * g++.dg/delayedfold/switch-1.C: New test. + 2015-11-16 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/58027 diff --git a/gcc/testsuite/g++.dg/delayedfold/switch-1.C b/gcc/testsuite/g++.dg/delayedfold/switch-1.C new file mode 100644 index 0000000..302da23 --- /dev/null +++ b/gcc/testsuite/g++.dg/delayedfold/switch-1.C @@ -0,0 +1,19 @@ +// PR c++/68362 +// { dg-do compile { target c++11 } } + +enum class A { foo }; +enum E { bar }; + +void +fn1 (const A a) +{ + switch (a) + case A::foo:; +} + +void +fn2 (E e) +{ + switch (e) + case bar:; +} |