From: Jakub Jelinek Date: Wed, 4 Dec 2013 18:00:28 +0000 (+0100) Subject: re PR c++/59268 ([c++11] ICE with constexpr in a virtual function) X-Git-Tag: releases/gcc-4.9.0~2288 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=565839ae124b82b6eba1d0f8053271df0f7c4c2a;p=thirdparty%2Fgcc.git 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 --- 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 (); +}