aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-12-09 17:00:19 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-12-09 17:00:19 +0000
commit73aef89eb7b3d00fef404cd3163115c1563a78cf (patch)
treee31fc55ad862a3c65fc3385fd9e3bb811dbcc1d1 /gcc
parent9c0c4ec7cdb619ed922ad1e5eb4605713646685e (diff)
downloadgcc-73aef89eb7b3d00fef404cd3163115c1563a78cf.zip
gcc-73aef89eb7b3d00fef404cd3163115c1563a78cf.tar.gz
gcc-73aef89eb7b3d00fef404cd3163115c1563a78cf.tar.bz2
re PR middle-end/46844 (regrename.c:312:22: error: unused parameter 'reg')
2010-12-09 Richard Guenther <rguenther@suse.de> PR middle-end/46844 * gimple-fold.c (canonicalize_constructor_val): Canonicalize addresses. * gcc.c-torture/compile/pr46866.c: New testcase. From-SVN: r167649
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimple-fold.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr46866.c19
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 29c1c32..9dec6e7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-09 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/46844
+ * gimple-fold.c (canonicalize_constructor_val): Canonicalize
+ addresses.
+
2010-12-09 Joseph Myers <joseph@codesourcery.com>
* config/i386/netware.h (TARGET_POSIX_IO): Define.
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index ae4771c..ba51ee8 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -132,6 +132,10 @@ canonicalize_constructor_val (tree cval)
return NULL_TREE;
if (base && TREE_CODE (base) == VAR_DECL)
add_referenced_var (base);
+ /* We never have the chance to fixup types in global initializers
+ during gimplification. Do so here. */
+ if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
+ cval = build_fold_addr_expr (TREE_OPERAND (cval, 0));
}
return cval;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ae01a31..e1317fb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-12-09 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/46844
+ * gcc.c-torture/compile/pr46866.c: New testcase.
+
2010-12-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR testsuite/45068
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr46866.c b/gcc/testsuite/gcc.c-torture/compile/pr46866.c
new file mode 100644
index 0000000..4941148
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr46866.c
@@ -0,0 +1,19 @@
+extern void *malloc(__SIZE_TYPE__);
+typedef struct T T;
+struct T {
+ void (*destroy)(void *);
+};
+void destroy(union { void *this; } __attribute__((transparent_union)));
+static const typeof(destroy) *_destroy = (const typeof(destroy)*)destroy;
+void destroy(void *this);
+static T *create_empty(void)
+{
+ T *this = malloc(sizeof(*this));
+ *this = (typeof(*this)){ _destroy };
+ return this;
+}
+void openssl_crl_load(void)
+{
+ T *this = create_empty();
+ destroy(this);
+}