aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2000-03-01 00:54:49 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2000-03-01 00:54:49 +0000
commit38769add25b9fb5b4d60e98c60ab2d6fb8bf0854 (patch)
tree209d8f75820cae9e2175dba019513afd425b6537
parentaa1e6de60cceb2383b282eab8e2d88d07f542b81 (diff)
downloadgcc-38769add25b9fb5b4d60e98c60ab2d6fb8bf0854.zip
gcc-38769add25b9fb5b4d60e98c60ab2d6fb8bf0854.tar.gz
gcc-38769add25b9fb5b4d60e98c60ab2d6fb8bf0854.tar.bz2
fold-const.c (size_binop): Don't asert inputs are the same and have TYPE_IS_SIZETYPE set.
* fold-const.c (size_binop): Don't asert inputs are the same and have TYPE_IS_SIZETYPE set. (size_diffop): Likewise. From-SVN: r32273
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c8
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/crash13.C11
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] ;
+}