aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-06-09 16:18:06 -0400
committerJason Merrill <jason@gcc.gnu.org>2017-06-09 16:18:06 -0400
commitc5d6c6d94e74dd2f72e323ff01ad2506115ffe05 (patch)
treeeb4f539bbaaeb903a261942e36ebb7ee4064d34d /gcc
parent3d2e25a240c7115c3deaaa9dea856588300dd05b (diff)
downloadgcc-c5d6c6d94e74dd2f72e323ff01ad2506115ffe05.zip
gcc-c5d6c6d94e74dd2f72e323ff01ad2506115ffe05.tar.gz
gcc-c5d6c6d94e74dd2f72e323ff01ad2506115ffe05.tar.bz2
Fix template argument of nullptr_t type.
* pt.c (convert_nontype_argument): Check NULLPTR_TYPE_P rather than nullptr_node. From-SVN: r249080
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/pt.c2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr38.C9
3 files changed, 13 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7bc9c20..8695d37 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2017-06-09 Jason Merrill <jason@redhat.com>
+ * pt.c (convert_nontype_argument): Check NULLPTR_TYPE_P rather than
+ nullptr_node.
+
* parser.c (cp_parser_constant_expression): Check
potential_rvalue_constant_expression after decay_conversion.
* pt.c (convert_nontype_argument): Don't require linkage in C++17.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index d8f8d46..40be3c1 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -6480,7 +6480,7 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
/* 14.3.2/5: The null pointer{,-to-member} conversion is applied
to a non-type argument of "nullptr". */
- if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
+ if (NULLPTR_TYPE_P (expr_type) && TYPE_PTR_OR_PTRMEM_P (type))
expr = fold_simple (convert (type, expr));
/* In C++11, integral or enumeration non-type template arguments can be
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr38.C b/gcc/testsuite/g++.dg/cpp0x/nullptr38.C
new file mode 100644
index 0000000..82d75ed
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr38.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+using nullptr_t = decltype(nullptr);
+
+constexpr nullptr_t n = nullptr;
+
+template <void *> struct A { };
+
+A<n> a;