From 0eb35d462fca8490994778c4224676388c69828e Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 21 Jan 2011 13:59:40 -0500 Subject: [PATCH] re PR c++/46552 ([C++0x] Internal compiler error on pointer to member variable with template) PR c++/46552 * semantics.c (cxx_eval_constant_expression): Handle OFFSET_REF. From-SVN: r169099 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/semantics.c | 1 + gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/cpp0x/constexpr-regress2.C | 13 +++++++++++++ 4 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-regress2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dcf8c49dd70..08d7a6d8e74 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-01-21 Jason Merrill + PR c++/46552 + * semantics.c (cxx_eval_constant_expression): Handle OFFSET_REF. + PR c++/46977 * semantics.c (potential_constant_expression_1): Split out from potential_constant_expression. Add want_rval parm. Handle diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 23ff27bf9a3..fa35d4ae990 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7024,6 +7024,7 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t, case NON_DEPENDENT_EXPR: case BASELINK: case EXPR_STMT: + case OFFSET_REF: if (!allow_non_constant) error_at (EXPR_LOC_OR_HERE (t), "expression %qE is not a constant-expression", t); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index df43d93cae3..09b657a0a72 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-01-21 Jason Merrill + PR c++/46552 + * g++.dg/cpp0x/constexpr-regress2.C: New. + * g++.dg/cpp0x/constexpr-stmtexpr.C: New. 2011-01-21 Jeff Law diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-regress2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-regress2.C new file mode 100644 index 00000000000..470ee1c4c80 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-regress2.C @@ -0,0 +1,13 @@ +// PR c++/46552 +// { dg-options -std=c++0x } + +struct S +{ + int x; +}; + +template < typename > +void f( void ) +{ + &S::x; +} -- 2.30.2