re PR c++/48089 ([C++0x] ICE on in(?)valid in constexpr constructors)
PR c++/48089 * semantics.c (potential_constant_expression_1): Don't allow *this in a constructor. (register_constexpr_fundef): Use potential_rvalue_constant_expression. From-SVN: r171086
This commit is contained in:
parent
89ae3825aa
commit
cb21e9cdf7
@ -1,5 +1,10 @@
|
||||
2011-03-16 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/48089
|
||||
* semantics.c (potential_constant_expression_1): Don't allow *this
|
||||
in a constructor.
|
||||
(register_constexpr_fundef): Use potential_rvalue_constant_expression.
|
||||
|
||||
PR c++/47301
|
||||
* decl.c (compute_array_index_type): Don't bother trying to deal
|
||||
with literal classes in ABI v1.
|
||||
|
@ -5674,11 +5674,11 @@ register_constexpr_fundef (tree fun, tree body)
|
||||
body = unshare_expr (TREE_OPERAND (body, 0));
|
||||
}
|
||||
|
||||
if (!potential_constant_expression (body))
|
||||
if (!potential_rvalue_constant_expression (body))
|
||||
{
|
||||
DECL_DECLARED_CONSTEXPR_P (fun) = false;
|
||||
if (!DECL_TEMPLATE_INSTANTIATION (fun))
|
||||
require_potential_constant_expression (body);
|
||||
require_potential_rvalue_constant_expression (body);
|
||||
return NULL;
|
||||
}
|
||||
fundef->body = body;
|
||||
@ -7496,7 +7496,16 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
|
||||
tree x = TREE_OPERAND (t, 0);
|
||||
STRIP_NOPS (x);
|
||||
if (is_this_parameter (x))
|
||||
return true;
|
||||
{
|
||||
if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)) && want_rval)
|
||||
{
|
||||
if (flags & tf_error)
|
||||
error ("the value of the object being constructed is "
|
||||
"not a constant expression");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return potential_constant_expression_1 (x, rval, flags);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
2011-03-16 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/cpp0x/constexpr-48089.C: New.
|
||||
|
||||
* g++.dg/cpp0x/constexpr-abi1.C: New.
|
||||
|
||||
* g++.dg/cpp0x/constexpr-46336.C: New.
|
||||
|
9
gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
Normal file
9
gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
Normal file
@ -0,0 +1,9 @@
|
||||
// PR c++/48089
|
||||
// { dg-options -std=c++0x }
|
||||
|
||||
struct s {
|
||||
constexpr s() : v(v) { } // { dg-error "object being constructed" }
|
||||
char v;
|
||||
};
|
||||
|
||||
s bang;
|
Loading…
Reference in New Issue
Block a user