]> granicus.if.org Git - clang/commitdiff
Extend template instantiation bug fix (r184503) with fixit test
authorLarisse Voufo <lvoufo@google.com>
Fri, 21 Jun 2013 18:49:56 +0000 (18:49 +0000)
committerLarisse Voufo <lvoufo@google.com>
Fri, 21 Jun 2013 18:49:56 +0000 (18:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184577 91177308-0d34-0410-b5e6-96231b3b80d8

test/CXX/temp/temp.spec/no-body.cpp

index cf90b3824eeabe11b3ce98f22f7ec07522d9c14c..a4d7914d9eb6d9bcd507798cb2a72b7cd26bd39c 100644 (file)
@@ -1,7 +1,7 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s
 // RUN: cp %s %t
-// RUN: not %clang_cc1 -fsyntax-only -fixit -x c++ %t
-// RUN: grep test_string %t
+// RUN: not %clang_cc1 -x c++ -fixit %t -DFIXING
+// RUN: %clang_cc1 -x c++ %t -DFIXING
 
 template<typename T> void f(T) { }
 template<typename T> void g(T) { }
@@ -15,7 +15,9 @@ namespace good {
 }
 
 namespace unsupported {
+#ifndef FIXING
  template struct y;     // expected-error {{elaborated type refers to a template}}
+#endif
 }
 
 template<typename T> void f0(T) { }
@@ -25,14 +27,18 @@ template<typename T> struct y0 { };
 
 // Should recover as if definition
 namespace noargs_body {
+#ifndef FIXING
   template void g0(int) { } // expected-error {{function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the 'template' keyword}}
-  template struct y0 { };   // expected-error {{class cannot be defined in an explicit instantiation; if this declaration is meant to be a class definition, remove the 'template' keyword}}
+#endif
+  template struct y0 { };     // expected-error {{class cannot be defined in an explicit instantiation; if this declaration is meant to be a class definition, remove the 'template' keyword}}
 }
 
 // Explicit specializations expected in global scope
 namespace exp_spec {
+#ifndef FIXING
   template<> void f0<int>(int) { }  // expected-error {{no function template matches function template specialization 'f0'}}
   template<> struct x0<int> { };    // expected-error {{class template specialization of 'x0' must originally be declared in the global scope}}
+#endif
 }
 
 template<typename T> void f1(T) { }
@@ -41,10 +47,12 @@ template<typename T> struct x1 { };  // expected-note {{explicitly specialized d
 // Should recover as if specializations, 
 // thus also complain about not being in global scope.
 namespace args_bad {
+#ifndef FIXING
   template void f1<int>(int) { }    // expected-error {{explicit template instantiation cannot have a definition; if this definition is meant to be an explicit specialization, add '<>' after the 'template' keyword}} \
                                        expected-error {{no function template matches function template specialization 'f1'}}
   template struct x1<int> { };      // expected-error {{explicit template instantiation cannot have a definition; if this definition is meant to be an explicit specialization, add '<>' after the 'template' keyword}} \
                                        expected-error {{class template specialization of 'x1' must originally be declared in the global scope}}
+#endif
 }
 
 template<typename T> void f2(T) { }