r184577 - Extend template instantiation bug fix (r184503) with fixit test

Larisse Voufo lvoufo at google.com
Fri Jun 21 11:49:56 PDT 2013


Author: lvoufo
Date: Fri Jun 21 13:49:56 2013
New Revision: 184577

URL: http://llvm.org/viewvc/llvm-project?rev=184577&view=rev
Log:
Extend template instantiation bug fix (r184503) with fixit test

Modified:
    cfe/trunk/test/CXX/temp/temp.spec/no-body.cpp

Modified: cfe/trunk/test/CXX/temp/temp.spec/no-body.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/temp/temp.spec/no-body.cpp?rev=184577&r1=184576&r2=184577&view=diff
==============================================================================
--- cfe/trunk/test/CXX/temp/temp.spec/no-body.cpp (original)
+++ cfe/trunk/test/CXX/temp/temp.spec/no-body.cpp Fri Jun 21 13:49:56 2013
@@ -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 { };  //
 // 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) { }





More information about the cfe-commits mailing list