re PR c++/54198 ("error: invalid use of incomplete type" when building Chromium)
authorJason Merrill <jason@redhat.com>
Tue, 4 Sep 2012 19:35:02 +0000 (15:35 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 4 Sep 2012 19:35:02 +0000 (15:35 -0400)
PR c++/54198
* decl.c (check_default_argument): Set cp_unevaluated_operand
around call to perform_implicit_conversion_flags.

From-SVN: r190949

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

index 47498cb..9148bbe 100644 (file)
@@ -1,5 +1,9 @@
 2012-09-04  Jason Merrill  <jason@redhat.com>
 
+       PR c++/54198
+       * decl.c (check_default_argument): Set cp_unevaluated_operand
+       around call to perform_implicit_conversion_flags.
+
        PR c++/54437
        PR c++/51213
        * pt.c (fn_type_unification): Call coerce_template_parms before
index 8b94e26..8024373 100644 (file)
@@ -10575,8 +10575,10 @@ check_default_argument (tree decl, tree arg)
 
      A default argument expression is implicitly converted to the
      parameter type.  */
+  ++cp_unevaluated_operand;
   perform_implicit_conversion_flags (decl_type, arg, tf_warning_or_error,
                                     LOOKUP_NORMAL);
+  --cp_unevaluated_operand;
 
   if (warn_zero_as_null_pointer_constant
       && c_inhibit_evaluation_warnings == 0
index 1c0bde0..0082a9c 100644 (file)
@@ -1,5 +1,8 @@
 2012-09-04  Jason Merrill  <jason@redhat.com>
 
+       PR c++/54198
+       * g++.dg/template/defarg15.C: New.
+
        PR c++/54437
        * g++.dg/template/access24.C: New.
 
diff --git a/gcc/testsuite/g++.dg/template/defarg15.C b/gcc/testsuite/g++.dg/template/defarg15.C
new file mode 100644 (file)
index 0000000..fea3dee
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/54198
+
+template <typename T> void
+refIfNotNull (T* p1)
+{
+    p1->ref;
+}
+template <typename T> struct A
+{
+    A (T* p1)
+    {
+        refIfNotNull (p1);
+    }
+};
+class B;
+class C
+{
+    void getParent (A <B> = 0);
+};