diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-02-22 00:17:46 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-02-22 00:17:46 +0000 |
commit | a64cb5a019f7f194b7bf24a1dd1470953d302d32 (patch) | |
tree | 461e0f783d085fef728e92bcf507c8537f4a3202 /clang/test/SemaTemplate/instantiate-local-class.cpp | |
parent | a349084a91025cff528bc3c4e5582ae5e049c2fc (diff) | |
download | bcm5719-llvm-a64cb5a019f7f194b7bf24a1dd1470953d302d32.tar.gz bcm5719-llvm-a64cb5a019f7f194b7bf24a1dd1470953d302d32.zip |
Sema: Don't crash when trying to instantiate a local class with an invalid base specifier
It was previously thought that Sema::InstantiateClass could not fail
from within this point in instantiate.
However, it can happen if the class is invalid some way (i.e. invalid
base specifier).
This fixes PR18907.
Differential Revision: http://llvm-reviews.chandlerc.com/D2850
llvm-svn: 201913
Diffstat (limited to 'clang/test/SemaTemplate/instantiate-local-class.cpp')
-rw-r--r-- | clang/test/SemaTemplate/instantiate-local-class.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/clang/test/SemaTemplate/instantiate-local-class.cpp b/clang/test/SemaTemplate/instantiate-local-class.cpp index 2bf24c2188e..c9897b9c614 100644 --- a/clang/test/SemaTemplate/instantiate-local-class.cpp +++ b/clang/test/SemaTemplate/instantiate-local-class.cpp @@ -1,5 +1,4 @@ // RUN: %clang_cc1 -verify -std=c++11 %s -// expected-no-diagnostics template<typename T> void f0() { struct X; @@ -181,3 +180,17 @@ namespace PR14373 { return 0; } } + +namespace PR18907 { +template <typename> +class C : public C<int> {}; // expected-error{{within its own definition}} + +template <typename X> +void F() { + struct A : C<X> {}; +} + +struct B { + void f() { F<int>(); } +}; +} |