diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-04-24 08:07:30 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-04-24 08:07:30 +0200 |
commit | dd0a516fa722bb2847ae1b4581ae2091c3977a5b (patch) | |
tree | 58f80e09989829fcabbe550b0bfbcba45424ec41 /gcc/varasm.c | |
parent | 06edd772e354ab922fa429bfe788a006f53511d8 (diff) | |
download | gcc-dd0a516fa722bb2847ae1b4581ae2091c3977a5b.zip gcc-dd0a516fa722bb2847ae1b4581ae2091c3977a5b.tar.gz gcc-dd0a516fa722bb2847ae1b4581ae2091c3977a5b.tar.bz2 |
re PR middle-end/53084 (GCC cannot handle array initialization of string constant with point arithmetic properly)
PR middle-end/53084
* varasm.c (compute_reloc_for_constant): Handle ADDR_EXPR
of MEM_REF.
(output_addressed_constants): Likewise.
* gcc.c-torture/execute/pr53084.c: New test.
From-SVN: r186742
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c index b7939c5..03ac49b 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -3934,6 +3934,13 @@ compute_reloc_for_constant (tree exp) tem = TREE_OPERAND (tem, 0)) ; + if (TREE_CODE (tem) == MEM_REF + && TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR) + { + reloc = compute_reloc_for_constant (TREE_OPERAND (tem, 0)); + break; + } + if (TREE_PUBLIC (tem)) reloc |= 2; else @@ -4002,6 +4009,9 @@ output_addressed_constants (tree exp) if (CONSTANT_CLASS_P (tem) || TREE_CODE (tem) == CONSTRUCTOR) output_constant_def (tem, 0); + + if (TREE_CODE (tem) == MEM_REF) + output_addressed_constants (TREE_OPERAND (tem, 0)); break; case PLUS_EXPR: |