re PR c++/83116 (Statement with no effect causes wrong code of static object constexpr method)
PR c++/83116 * constexpr.c (cxx_eval_call_expression): Only look into constexpr_call_table if ctx->strict. * g++.dg/cpp1y/constexpr-83116.C: New test. From-SVN: r255813
This commit is contained in:
parent
109836feac
commit
fe513fce56
|
@ -1,3 +1,12 @@
|
|||
2017-12-19 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
2017-12-18 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/83116
|
||||
* constexpr.c (cxx_eval_call_expression): Only look into
|
||||
constexpr_call_table if ctx->strict.
|
||||
|
||||
2017-12-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
|
|
|
@ -1558,7 +1558,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
|
|||
tree result = NULL_TREE;
|
||||
|
||||
constexpr_call *entry = NULL;
|
||||
if (depth_ok && !non_constant_args)
|
||||
if (depth_ok && !non_constant_args && ctx->strict)
|
||||
{
|
||||
new_call.hash = iterative_hash_template_arg
|
||||
(new_call.bindings, constexpr_fundef_hasher::hash (new_call.fundef));
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// PR c++/83116
|
||||
// { dg-do run { target c++14 } }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
struct S {
|
||||
constexpr S () : s(0) { foo (); }
|
||||
constexpr int foo () { return s; }
|
||||
int s;
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
static S var;
|
||||
var.s = 5;
|
||||
if (var.s != 5 || var.foo () != 5)
|
||||
__builtin_abort ();
|
||||
}
|
Loading…
Reference in New Issue