]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/47705 (internal compiler error: in convert_nontype_argument, at cp/pt.c...
authorJason Merrill <jason@gcc.gnu.org>
Tue, 8 Mar 2011 22:39:57 +0000 (17:39 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 8 Mar 2011 22:39:57 +0000 (17:39 -0500)
PR c++/47705
* pt.c (convert_nontype_argument): Only call decay_conversion on
arrays.

From-SVN: r170795

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/nontype21.C [new file with mode: 0644]

index 1a8111a1ca9ca3e98847aef60fde9b93c8e38bfc..1dd10b50992d6a39c14a7d32efa6ffac1227b2cb 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-08  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/47705
+       * pt.c (convert_nontype_argument): Only call decay_conversion on
+       arrays.
+
 2011-03-08  Dodji Seketeli  <dodji@redhat.com>
 
        * name-lookup.c (binding_to_template_parms_of_scope_p): Only
index c9797766b5b96cb0d027f741330c3fbe482aa343..94cff1c0e68bf5a0c8396744afa49c6973f99692 100644 (file)
@@ -4951,7 +4951,8 @@ convert_nontype_argument (tree type, tree expr)
 
   /* Add the ADDR_EXPR now for the benefit of
      value_dependent_expression_p.  */
-  if (TYPE_PTROBV_P (type))
+  if (TYPE_PTROBV_P (type)
+      && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
     expr = decay_conversion (expr);
 
   /* If we are in a template, EXPR may be non-dependent, but still
index 87657645de8fdb9a7ba4070c7040c1e616e1cf57..10032f4c85c2c6454771a4fb9cb34bce7f250de2 100644 (file)
@@ -1,3 +1,7 @@
+2011-03-08  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/template/nontype21.C: New.
+
 2011-03-08  Dodji Seketeli  <dodji@redhat.com>
 
        * g++.dg/lookup/template3.C: New test.
diff --git a/gcc/testsuite/g++.dg/template/nontype21.C b/gcc/testsuite/g++.dg/template/nontype21.C
new file mode 100644 (file)
index 0000000..69cab54
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/47705
+
+template<char const * const x> class Something { };
+
+extern char const xyz;
+
+class SomethingElse:public Something<xyz> { }; // { dg-error "xyz. is a variable" }