diff options
author | Jason Merrill <jason@redhat.com> | 2015-08-21 14:33:07 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2015-08-21 14:33:07 -0400 |
commit | 7717e0f19e46c0accd55b48b67d0408f037b4a7a (patch) | |
tree | 9ce9e3c332b9ac7a95e7ca2f28488c84378c7924 | |
parent | f291336269664e5a89c94335c30dfed38142803f (diff) | |
download | gcc-7717e0f19e46c0accd55b48b67d0408f037b4a7a.zip gcc-7717e0f19e46c0accd55b48b67d0408f037b4a7a.tar.gz gcc-7717e0f19e46c0accd55b48b67d0408f037b4a7a.tar.bz2 |
re PR c++/67240 ([concepts] Implicit conversion constraints are not respected)
PR c++/67240
* constraint.cc (satisfy_implicit_conversion_constraint): Also
check for NULL_TREE.
From-SVN: r227081
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/constraint.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/concepts/iconv1.C | 20 |
3 files changed, 27 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bc613f0..c2a1206 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2015-08-21 Jason Merrill <jason@redhat.com> + + PR c++/67240 + * constraint.cc (satisfy_implicit_conversion_constraint): Also + check for NULL_TREE. + 2015-08-21 Paolo Carlini <paolo.carlini@oracle.com> * decl.c (grokvardecl): Simplify the latter. diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index c981212..cb82535 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -1775,7 +1775,7 @@ satisfy_implicit_conversion_constraint (tree t, tree args, of the form TYPE <unspecified> = EXPR. */ tree conv = perform_direct_initialization_if_possible (type, expr, false, complain); - if (conv == error_mark_node) + if (conv == NULL_TREE || conv == error_mark_node) return boolean_false_node; else return boolean_true_node; diff --git a/gcc/testsuite/g++.dg/concepts/iconv1.C b/gcc/testsuite/g++.dg/concepts/iconv1.C new file mode 100644 index 0000000..c4dd38f --- /dev/null +++ b/gcc/testsuite/g++.dg/concepts/iconv1.C @@ -0,0 +1,20 @@ +// PR c++/67240 +// { dg-options -std=c++1z } + +int foo(int x) +{ + return x; +} + +template <typename T> +concept bool C1 = requires (T x) { + {foo(x)} -> int&; +}; + +template <typename T> +concept bool C2 = requires (T x) { + {foo(x)} -> void; +}; + +static_assert( C1<int> ); // { dg-error "assert" } +static_assert( C2<int> ); // { dg-error "assert" } |