From 565839ae124b82b6eba1d0f8053271df0f7c4c2a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 4 Dec 2013 19:00:28 +0100 Subject: [PATCH] re PR c++/59268 ([c++11] ICE with constexpr in a virtual function) PR c++/59268 * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR. * g++.dg/cpp0x/constexpr-template6.C: New test. From-SVN: r205674 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 4 ++++ gcc/testsuite/ChangeLog | 5 +++++ .../g++.dg/cpp0x/constexpr-template6.C | 20 +++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e2fc2a2d125b..119f309b15c1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-12-04 Jakub Jelinek + + PR c++/59268 + * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR. + 2013-11-29 Marek Polacek PR sanitizer/59331 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b58c7556e2ea..25d940c695a1 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -14159,6 +14159,10 @@ tsubst_copy_and_build (tree t, RETURN (r); } + case POINTER_PLUS_EXPR: + return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)), + RECUR (TREE_OPERAND (t, 1))); + case SCOPE_REF: RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true, /*address_p=*/false)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3fe3212dd73d..b2331560b24f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-12-04 Jakub Jelinek + + PR c++/59268 + * g++.dg/cpp0x/constexpr-template6.C: New test. + 2013-12-04 Eric Botcazou * gnat.dg/pack19.adb: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C new file mode 100644 index 000000000000..eac6004aeb35 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C @@ -0,0 +1,20 @@ +// PR c++/59268 +// { dg-do compile } +// { dg-options "-std=c++11" } + +template +struct A +{ + constexpr A (int) {} + virtual void foo () + { + constexpr A a (0); + } +}; + +void +bar () +{ + A a (3); + a.foo (); +} -- 2.47.2