From 2bba76b0ec4c2f2134eebb1a2bbfe102f36c2f6e Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 27 May 2009 17:07:49 +0000 Subject: Improve name lookup for and template instantiation of declaration references. There are several smallish fixes here: - Make sure we look through template parameter scope when determining whether we're parsing a nested class (or nested class *template*). This makes sure that we delay parsing the bodies of inline member functions until after we're out of the outermost class (template) scope. - Since the bodies of member functions are always parsed "out-of-line", even when they were declared in-line, teach unqualified name lookup to look into the (semantic) parents. - Use the new InstantiateDeclRef to handle the instantiation of a reference to a declaration (in DeclRefExpr), which drastically simplifies template instantiation for DeclRefExprs. - When we're instantiating a ParmVarDecl, it must be in the current instantiation scope, so only look there. Also, remove the #if 0's and FIXME's from the dynarray example, which now compiles and executes thanks to Anders and Eli. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72481 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/SemaTemplate/example-dynarray.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'test/SemaTemplate/example-dynarray.cpp') diff --git a/test/SemaTemplate/example-dynarray.cpp b/test/SemaTemplate/example-dynarray.cpp index 1fe85d920c..0fcaba3d9b 100644 --- a/test/SemaTemplate/example-dynarray.cpp +++ b/test/SemaTemplate/example-dynarray.cpp @@ -120,8 +120,6 @@ int main() { assert(di.size() == 4); di.push_back(4); -#if 0 - // FIXME: Copy construction via copy initialization dynarray di2 = di; assert(di2.size() == 5); assert(di.begin() != di2.begin()); @@ -129,7 +127,6 @@ int main() { I != IEnd; ++I) assert(*I == I - di2.begin()); - // FIXME: Copy construction via direct initialization dynarray di3(di); assert(di3.size() == 5); assert(di.begin() != di3.begin()); @@ -137,7 +134,6 @@ int main() { I != IEnd; ++I) assert(*I == I - di3.begin()); - // FIXME: assignment operator dynarray di4; assert(di4.size() == 0); di4 = di; @@ -146,7 +142,6 @@ int main() { for (dynarray::iterator I = di4.begin(), IEnd = di4.end(); I != IEnd; ++I) assert(*I == I - di4.begin()); -#endif return 0; } -- cgit v1.2.3-18-g5258