diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/crash13.C | 11 |
3 files changed, 21 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a325ef4..c65598e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2000-02-29 Mark Mitchell <mark@codesourcery.com> + + * fold-const.c (size_binop): Don't asert inputs are the same and + have TYPE_IS_SIZETYPE set. + (size_diffop): Likewise. + 2000-02-29 Jason Merrill <jason@casey.cygnus.com> * dwarfout.c (output_block): Output abstract blocks even if they diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 24bf6f1..097650f 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1868,8 +1868,8 @@ size_binop (code, arg0, arg1) { tree type = TREE_TYPE (arg0); - if (type != TREE_TYPE (arg1) - || TREE_CODE (type) != INTEGER_TYPE || ! TYPE_IS_SIZETYPE (type)) + if (TREE_CODE (type) != INTEGER_TYPE + || TREE_CODE (TREE_TYPE (arg1)) != INTEGER_TYPE) abort (); /* Handle the special case of two integer constants faster. */ @@ -1905,8 +1905,8 @@ size_diffop (arg0, arg1) tree type = TREE_TYPE (arg0); tree ctype; - if (TREE_TYPE (arg1) != type || TREE_CODE (type) != INTEGER_TYPE - || ! TYPE_IS_SIZETYPE (type)) + if (TREE_CODE (type) != INTEGER_TYPE + || TREE_CODE (TREE_TYPE (arg1)) != INTEGER_TYPE) abort (); /* If the type is already signed, just do the simple thing. */ diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash13.C b/gcc/testsuite/g++.old-deja/g++.other/crash13.C new file mode 100644 index 0000000..7593f43 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/crash13.C @@ -0,0 +1,11 @@ +struct Base_bitset { + unsigned M_w[2]; + void M_do_right_shift(); +}; + + +void Base_bitset::M_do_right_shift () +{ + unsigned n = 0; + M_w[0] = M_w[n + 1] ; +} |