diff options
author | Richard Guenther <rguenther@suse.de> | 2010-12-09 17:00:19 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-12-09 17:00:19 +0000 |
commit | 73aef89eb7b3d00fef404cd3163115c1563a78cf (patch) | |
tree | e31fc55ad862a3c65fc3385fd9e3bb811dbcc1d1 | |
parent | 9c0c4ec7cdb619ed922ad1e5eb4605713646685e (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimple-fold.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr46866.c | 19 |
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); +} |