diff options
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiate.cpp | 3 | ||||
-rw-r--r-- | clang/test/SemaTemplate/instantiate-member-class.cpp | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index 60423f9f472..f6e36bf7791 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -683,8 +683,7 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation, } Pattern = PatternDef; - InstantiatingTemplate Inst(*this, Instantiation->getLocation(), - Instantiation); + InstantiatingTemplate Inst(*this, PointOfInstantiation, Instantiation); if (Inst) return true; diff --git a/clang/test/SemaTemplate/instantiate-member-class.cpp b/clang/test/SemaTemplate/instantiate-member-class.cpp index 26fddcfb344..fab65cef2e4 100644 --- a/clang/test/SemaTemplate/instantiate-member-class.cpp +++ b/clang/test/SemaTemplate/instantiate-member-class.cpp @@ -6,7 +6,7 @@ public: struct C { T &foo(); }; struct D { - struct E { T &bar(); }; + struct E { T &bar(); }; // expected-error{{cannot form a reference to 'void'}} struct F; // expected-note{{member is declared here}} }; }; @@ -31,3 +31,8 @@ void test_instantiation(X<double>::C *x, f->foo(); // expected-error{{implicit instantiation of undefined member 'struct X<float>::D::F'}} } + + +X<void>::C *c3; // okay +X<void>::D::E *e1; // okay +X<void>::D::E e2; // expected-note{{in instantiation of member class 'struct X<void>::D::E' requested here}} |