Commit 00a0d6f3 by Jason Merrill Committed by Jason Merrill

re PR c++/48089 ([C++0x] ICE on in(?)valid in constexpr constructors)

	PR c++/48089
	* semantics.c (potential_constant_expression_1): Change error about
	use of *this in constructor into sorry.

From-SVN: r171687
parent 5c82436e
2011-03-29 Jason Merrill <jason@redhat.com> 2011-03-29 Jason Merrill <jason@redhat.com>
PR c++/48089
* semantics.c (potential_constant_expression_1): Change error about
use of *this in constructor into sorry.
PR c++/48296 PR c++/48296
* decl.c (cp_finish_decl): Defer validation of constexpr member * decl.c (cp_finish_decl): Defer validation of constexpr member
functions. functions.
......
...@@ -7495,8 +7495,8 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags) ...@@ -7495,8 +7495,8 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)) && want_rval) if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)) && want_rval)
{ {
if (flags & tf_error) if (flags & tf_error)
error ("the value of the object being constructed is " sorry ("use of the value of the object being constructed "
"not a constant expression"); "in a constant expression");
return false; return false;
} }
return true; return true;
......
2011-03-29 Jason Merrill <jason@redhat.com> 2011-03-29 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/constexpr-48089.C: Adjust.
* g++.dg/cpp0x/constexpr-memfn1.C: New. * g++.dg/cpp0x/constexpr-memfn1.C: New.
* g++.dg/cpp0x/constexpr-diag1.C: Adjust error locations. * g++.dg/cpp0x/constexpr-diag1.C: Adjust error locations.
......
// PR c++/48089 // PR c++/48089
// { dg-options -std=c++0x } // { dg-options -std=c++0x }
// bang is ill-formed (diagnostic required) because its initializer is
// non-constant, because it uses the value of an uninitialized object.
// s() is ill-formed (no diagnostic required) because there is no set of
// arguments that would produce a constant expression.
// R() is well-formed because i is initialized before j.
struct s { struct s {
constexpr s() : v(v) { } // { dg-error "object being constructed" } constexpr s() : v(v) { } // { dg-message "" }
char v; int v;
};
constexpr s bang; // { dg-error "" }
struct R {
int i,j;
constexpr R() : i(42),j(i) { } // { dg-bogus "" "" { xfail *-*-* } }
}; };
s bang; constexpr R r; // { dg-bogus "" "" { xfail *-*-* } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment