aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <andrew_pinski@playstation.sony.com>2007-08-04 00:33:31 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2007-08-03 17:33:31 -0700
commita83e7facc5549687bfee14f24850528e79bb5a95 (patch)
tree5bc2b122837ec11f3ca351c56ec17682a79d19ee /gcc
parent814d1e640cb413318401505edb6dde08e8b6f936 (diff)
downloadgcc-a83e7facc5549687bfee14f24850528e79bb5a95.zip
gcc-a83e7facc5549687bfee14f24850528e79bb5a95.tar.gz
gcc-a83e7facc5549687bfee14f24850528e79bb5a95.tar.bz2
re PR middle-end/32399 (ICE in build2_stat, at tree.c:3074)
2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com> PR middle-end/32399 * tree-ssa-address.c (add_to_parts): Use POINTER_PLUS_EXPR when adding to the base and convert ELT to sizetype instead of type. 2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com> RP middle-end/32399 * gcc.c-torture/compile/pr32399.c: New testcase. From-SVN: r127196
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr32399.c16
-rw-r--r--gcc/tree-ssa-address.c4
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eeb4a51..b2bff86 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
+ PR middle-end/32399
+ * tree-ssa-address.c (add_to_parts): Use POINTER_PLUS_EXPR
+ when adding to the base and convert ELT to sizetype instead of type.
+
+2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
PR middle-end/32304
* ipa-reference.c (has_proper_scope_for_analysis): Return false when
the decl's type has TYPE_NEEDS_CONSTRUCTING set.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce38fc7..8814bd2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
+ RP middle-end/32399
+ * gcc.c-torture/compile/pr32399.c: New testcase.
+
+2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
PR middle-end/32304
* g++.dg/torture/pr32304.C: New testcase.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32399.c b/gcc/testsuite/gcc.c-torture/compile/pr32399.c
new file mode 100644
index 0000000..cc2b1b1
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr32399.c
@@ -0,0 +1,16 @@
+void f(unsigned char *src, unsigned char *dst, int num, unsigned char *pos, unsigned char *diffuse, int hasdiffuse, unsigned char *specular, int hasspecular) {
+ int i;
+
+ for(i=num;i--;) {
+ float *p = (float *) ((__SIZE_TYPE__) dst + (__SIZE_TYPE__) pos);
+ if(hasdiffuse) {
+ unsigned int *dstColor = (unsigned int *) (dst + i + (__SIZE_TYPE__) diffuse);
+ *dstColor = * (unsigned int *) ( ((__SIZE_TYPE__) src + (__SIZE_TYPE__) diffuse) + i);
+ }
+ if(hasspecular) {
+ unsigned int *dstColor = (unsigned int *) (dst + i + (__SIZE_TYPE__) specular);
+ *dstColor = * (unsigned int *) ( ((__SIZE_TYPE__) src + (__SIZE_TYPE__) specular) + i);
+ }
+ }
+}
+
diff --git a/gcc/tree-ssa-address.c b/gcc/tree-ssa-address.c
index 577ede3..90a01dc 100644
--- a/gcc/tree-ssa-address.c
+++ b/gcc/tree-ssa-address.c
@@ -422,9 +422,9 @@ add_to_parts (struct mem_address *parts, tree elt)
/* Add ELT to base. */
type = TREE_TYPE (parts->base);
- parts->base = fold_build2 (PLUS_EXPR, type,
+ parts->base = fold_build2 (POINTER_PLUS_EXPR, type,
parts->base,
- fold_convert (type, elt));
+ fold_convert (sizetype, elt));
}
/* Finds the most expensive multiplication in ADDR that can be