aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-18 17:07:24 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2014-11-18 17:07:24 +0000
commit7321fbd5edb3905d2fcf75c8f5c6e0b9734d0145 (patch)
tree53b4559d47a26ddc6ee87eb8ea55094d828dba04
parentef7f5966f4a10b3b7eb58f60750868636ef981a6 (diff)
PR c++/63934
* constexpr.c (cxx_eval_call_expression): Check DECL_CONSTRUCTOR_P rather than VOID_TYPE_P. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217729 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/constexpr.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 117355975fa..28d8796842d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2014-11-18 Jason Merrill <jason@redhat.com>
+ PR c++/63934
+ * constexpr.c (cxx_eval_call_expression): Check DECL_CONSTRUCTOR_P
+ rather than VOID_TYPE_P.
+
* pt.c (instantiate_template_1): Use tsubst_aggr_type for context.
PR c++/58102
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index 2f0708b40ec..4325caa0672 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -1328,7 +1328,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
addr, non_constant_p, overflow_p,
&jump_target);
- if (VOID_TYPE_P (TREE_TYPE (res)))
+ if (DECL_CONSTRUCTOR_P (fun))
/* This can be null for a subobject constructor call, in
which case what we care about is the initialization
side-effects rather than the value. We could get at the
@@ -1367,7 +1367,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
{
/* If this was a call to initialize an object, set the type of
the CONSTRUCTOR to the type of that object. */
- if (DECL_CONSTRUCTOR_P (fun))
+ if (DECL_CONSTRUCTOR_P (fun) && !use_new_call)
{
tree ob_arg = get_nth_callarg (t, 0);
STRIP_NOPS (ob_arg);