diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2014-11-26 20:11:16 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-11-26 20:11:16 +0000 |
commit | 2ad2e0afc6e7c7510c340b8de6202ed1f3f9b733 (patch) | |
tree | a8b48a23accbe9fa8ddc3bd52727c75c5dfbcd3d /gcc | |
parent | 4bb0ca2d1e6a8b625788a191fe28f5698cae2344 (diff) | |
download | gcc-2ad2e0afc6e7c7510c340b8de6202ed1f3f9b733.zip gcc-2ad2e0afc6e7c7510c340b8de6202ed1f3f9b733.tar.gz gcc-2ad2e0afc6e7c7510c340b8de6202ed1f3f9b733.tar.bz2 |
re PR c++/63757 (nullptr conversion sequence fails to compile)
/cp
2014-11-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/63757
* call.c (standard_conversion): Do not require expr to be non-null
when NULLPTR_TYPE_P (from) is true.
/testsuite
2014-11-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/63757
* g++.dg/cpp0x/nullptr33.C: New.
From-SVN: r218098
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nullptr33.C | 19 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 32092c4..756c8d8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-11-26 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/63757 + * call.c (standard_conversion): Do not require expr to be non-null + when NULLPTR_TYPE_P (from) is true. + 2014-11-26 Jason Merrill <jason@redhat.com> * constexpr.c (cxx_eval_constant_expression) [SAVE_EXPR]: Avoid diff --git a/gcc/cp/call.c b/gcc/cp/call.c index a7a8667..d8075bd 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -1194,7 +1194,8 @@ standard_conversion (tree to, tree from, tree expr, bool c_cast_p, rvalue of type std::nullptr_t. */ if ((tcode == POINTER_TYPE || TYPE_PTRMEM_P (to) || NULLPTR_TYPE_P (to)) - && expr && null_ptr_cst_p (expr)) + && ((expr && null_ptr_cst_p (expr)) + || NULLPTR_TYPE_P (from))) conv = build_conv (ck_std, to, conv); else if ((tcode == INTEGER_TYPE && fcode == POINTER_TYPE) || (tcode == POINTER_TYPE && fcode == INTEGER_TYPE)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b8239da..d32f1f9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-11-26 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/63757 + * g++.dg/cpp0x/nullptr33.C: New. + 2014-11-26 Jakub Jelinek <jakub@redhat.com> * lib/tsan-dg.exp (check_effective_target_fsanitize_thread, diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr33.C b/gcc/testsuite/g++.dg/cpp0x/nullptr33.C new file mode 100644 index 0000000..75c782a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr33.C @@ -0,0 +1,19 @@ +// PR c++/63757 +// { dg-do compile { target c++11 } } + +typedef decltype(nullptr) nullptr_t; + +void bar(void*) {} + +struct foo +{ + operator nullptr_t() + { + return nullptr; + } +}; + +int main() +{ + bar(foo()); +} |