aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-03-16 17:16:33 -0400
committerJason Merrill <jason@gcc.gnu.org>2017-03-16 17:16:33 -0400
commitfbd603c43d7315bf2b29880548cb80ef4d8f62cd (patch)
treeed1b3919e2bdb89acc5d15fb8dcd211c60dd70e2 /gcc
parent207f34233c1d3fff9e07ecf2bd7dc30d86822e66 (diff)
downloadgcc-fbd603c43d7315bf2b29880548cb80ef4d8f62cd.zip
gcc-fbd603c43d7315bf2b29880548cb80ef4d8f62cd.tar.gz
gcc-fbd603c43d7315bf2b29880548cb80ef4d8f62cd.tar.bz2
re PR c++/79797 (ICE with NSDMI, this pointer and constexpr)
PR c++/79797 * constexpr.c (lookup_placeholder): Tweak. From-SVN: r246210
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/constexpr.c7
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e5fa93a..99836fb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/79797
+ * constexpr.c (lookup_placeholder): Tweak.
+
2017-03-15 Jason Merrill <jason@redhat.com>
PR c++/80043 - ICE with -fpermissive
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index 2510e23..4136b34 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -3832,14 +3832,17 @@ cxx_eval_switch_expr (const constexpr_ctx *ctx, tree t,
static tree
lookup_placeholder (const constexpr_ctx *ctx, bool lval, tree type)
{
- if (!ctx || !ctx->ctor || (lval && !ctx->object))
+ if (!ctx)
return NULL_TREE;
/* We could use ctx->object unconditionally, but using ctx->ctor when we
can is a minor optimization. */
- if (!lval && same_type_p (TREE_TYPE (ctx->ctor), type))
+ if (!lval && ctx->ctor && same_type_p (TREE_TYPE (ctx->ctor), type))
return ctx->ctor;
+ if (!ctx->object)
+ return NULL_TREE;
+
/* Since an object cannot have a field of its own type, we can search outward
from ctx->object to find the unique containing object of TYPE. */
tree ob = ctx->object;