diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-12-17 22:54:37 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-12-17 22:54:37 +0100 |
commit | 1e9d69235a88347d293dec7927e34dd38f6ee580 (patch) | |
tree | caf2a15f344f9fad9f8519dd5171ebea378681f5 | |
parent | f4d458f3fab13daa8a8adbc7165ee4a7050db3f6 (diff) | |
download | gcc-1e9d69235a88347d293dec7927e34dd38f6ee580.zip gcc-1e9d69235a88347d293dec7927e34dd38f6ee580.tar.gz gcc-1e9d69235a88347d293dec7927e34dd38f6ee580.tar.bz2 |
re PR c++/88410 (internal compiler error: output_operand: invalid expression as operand)
PR c++/88410
* cp-gimplify.c (cp_fold) <case ADDR_EXPR>: For offsetof-like folding,
call maybe_constant_value on val to see if it is INTEGER_CST.
* g++.dg/cpp0x/pr88410.C: New test.
From-SVN: r267220
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr88410.C | 7 |
4 files changed, 19 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a7ec887..ed652bd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-12-17 Jakub Jelinek <jakub@redhat.com> + + PR c++/88410 + * cp-gimplify.c (cp_fold) <case ADDR_EXPR>: For offsetof-like folding, + call maybe_constant_value on val to see if it is INTEGER_CST. + 2018-12-17 Jonathan Wakely <jwakely@redhat.com> PR c++/52321 diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 5cb54ad..d27e39c 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -2317,6 +2317,7 @@ cp_fold (tree x) { val = TREE_OPERAND (val, 0); STRIP_NOPS (val); + val = maybe_constant_value (val); if (TREE_CODE (val) == INTEGER_CST) return fold_offsetof (op0, TREE_TYPE (x)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fa12103..50ff532 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-12-17 Jakub Jelinek <jakub@redhat.com> + + PR c++/88410 + * g++.dg/cpp0x/pr88410.C: New test. + 2018-12-17 Steve Ellcey <sellcey@cavium.com> * gcc.target/aarch64/torture/aarch64-torture.exp: New file. diff --git a/gcc/testsuite/g++.dg/cpp0x/pr88410.C b/gcc/testsuite/g++.dg/cpp0x/pr88410.C new file mode 100644 index 0000000..c64e62d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr88410.C @@ -0,0 +1,7 @@ +// PR c++/88410 +// { dg-do compile { target c++11 } } + +typedef __UINTPTR_TYPE__ uintptr_t; +const uintptr_t a = 32; +struct C { int b; int c; }; +uintptr_t d { uintptr_t (&reinterpret_cast<C *>(a)->c) - a }; |