diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-06-02 22:53:06 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-06-02 22:53:06 +0000 |
commit | 0f2be186027c844e6427c240cf29ad19c0501bae (patch) | |
tree | be15081fb0f67a7282ab4edd26ac5782216abf4f /test/SemaTemplate | |
parent | 6d1c14d6d4aaefe04a91f23ccc0c295085f4b4c0 (diff) |
Fix assertion failure if we can't deduce a template argument for a variable
template partial specialization.
In passing, fix the deduction-crash.cpp test to actually run all the tests. Due
to a typo, the last third of the file was being skipped by the parser and some
of the tests were not actually testing anything as a result. Switch from
FileCheck to -verify to make the problem more obvious and prevent this
happening again.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@304604 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaTemplate')
-rw-r--r-- | test/SemaTemplate/deduction-crash.cpp | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/test/SemaTemplate/deduction-crash.cpp b/test/SemaTemplate/deduction-crash.cpp index c94c9db94e..74a25865aa 100644 --- a/test/SemaTemplate/deduction-crash.cpp +++ b/test/SemaTemplate/deduction-crash.cpp @@ -1,14 +1,10 @@ -// RUN: not %clang_cc1 -fsyntax-only %s -std=c++11 2>&1| FileCheck %s - -// Note that the error count below doesn't matter. We just want to -// make sure that the parser doesn't crash. -// CHECK: 17 errors +// RUN: %clang_cc1 -fsyntax-only %s -std=c++1z -verify // PR7511 -template<a> +template<a> // expected-error +{{}} struct int_; -template<a> +template<a> // expected-error +{{}} template<int,typename T1,typename> struct ac { @@ -17,7 +13,7 @@ struct ac template<class>struct aaa { - typedef ac<1,int,int>::ae ae + typedef ac<1,int,int>::ae ae // expected-error +{{}} }; template<class> @@ -36,19 +32,19 @@ struct state_machine struct In; template<int my> - struct In<a::int_<aaa::a>,my>; + struct In<a::int_<aaa::a>,my>; // expected-error +{{}} template<class Event> int process(Event) { - In<a::int_<0> > a; + In<a::int_<0> > a; // expected-error +{{}} } - } + } // expected-error +{{}} template<class Event> int ant(Event) { region_processing_helper<int>* helper; - helper->process(0) + helper->process(0) // expected-error +{{}} } }; @@ -81,21 +77,21 @@ void endl( ) ; extern basic_ostream<char> cout; -int operator<<( basic_ostream<char> , pair ) ; +int operator<<( basic_ostream<char> , pair ) ; // expected-note +{{}} void register_object_imp ( ) { -cout << endl<1>; +cout << endl<1>; // expected-error +{{}} } // PR12933 -namespacae PR12933 { - template<typename S> +namespace PR12933 { + template<typename S> // expected-error +{{}} template<typename T> void function(S a, T b) {} int main() { - function(0, 1); + function(0, 1); // expected-error +{{}} return 0; } } @@ -142,3 +138,9 @@ namespace PR14281_part3 { template <class T, int* i> struct B {}; A<B<int, &some_decl>, &some_decl>::type x; } + +namespace var_template_partial_spec_incomplete { + template<typename T> int n; + template<typename T, typename U = void> int n<T *>; // expected-error +{{}} expected-note {{}} + int k = n<void *>; +} |