diff options
author | Jason Merrill <jason@redhat.com> | 2018-02-16 11:44:17 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-02-16 11:44:17 -0500 |
commit | 9dc20710e8380bdaf03551b45a2234c6d18c6519 (patch) | |
tree | 99ff75f0018fca5a6165d112e4eecd08796ccefa | |
parent | c3ab26e8bb0c5bf1c20358d036f987a20734c9ad (diff) | |
download | gcc-9dc20710e8380bdaf03551b45a2234c6d18c6519.zip gcc-9dc20710e8380bdaf03551b45a2234c6d18c6519.tar.gz gcc-9dc20710e8380bdaf03551b45a2234c6d18c6519.tar.bz2 |
PR c++/84421 - type-dependent if constexpr
* semantics.c (finish_if_stmt_cond): Check
type_dependent_expression_p.
From-SVN: r257744
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C | 14 |
3 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ee08e68..17af633 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2018-02-16 Jason Merrill <jason@redhat.com> + + PR c++/84421 - type-dependent if constexpr + * semantics.c (finish_if_stmt_cond): Check type_dependent_expression_p. + 2018-02-16 Nathan Sidwell <nathan@acm.org> Deprecate -ffriend-injection. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index f0cee68..35569d0 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -731,6 +731,7 @@ finish_if_stmt_cond (tree cond, tree if_stmt) { cond = maybe_convert_cond (cond); if (IF_STMT_CONSTEXPR_P (if_stmt) + && !type_dependent_expression_p (cond) && require_constant_expression (cond) && !value_dependent_expression_p (cond)) { diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C new file mode 100644 index 0000000..f6cc39a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C @@ -0,0 +1,14 @@ +// PR c++/84421 +// { dg-options -std=c++17 } + +struct A{ + constexpr operator bool() const { return true; } +}; + +int main(){ + auto f = [](auto v){ + if constexpr(v){} + }; + A a; + f(a); +} |