diff options
author | Jason Merrill <jason@redhat.com> | 2017-03-16 17:16:33 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-03-16 17:16:33 -0400 |
commit | fbd603c43d7315bf2b29880548cb80ef4d8f62cd (patch) | |
tree | ed1b3919e2bdb89acc5d15fb8dcd211c60dd70e2 /gcc | |
parent | 207f34233c1d3fff9e07ecf2bd7dc30d86822e66 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 7 |
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; |