Tests and fixes for templates declared within (non-template)
classes. Test case from Anders Carlsson, fix from Piotr Rak!



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67817 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp
index 616ee3d..770f930 100644
--- a/lib/Sema/SemaLookup.cpp
+++ b/lib/Sema/SemaLookup.cpp
@@ -600,10 +600,11 @@
       // base classes, we never need to perform qualified lookup
       // because all of the members are on top of the identifier
       // chain.
-      if (isa<RecordDecl>(Ctx) &&
-          (R = LookupQualifiedName(Ctx, Name, NameKind, RedeclarationOnly)))
-        return std::make_pair(true, R);
-
+      if (isa<RecordDecl>(Ctx)) {
+        R = LookupQualifiedName(Ctx, Name, NameKind, RedeclarationOnly);
+        if (R || RedeclarationOnly)
+          return std::make_pair(true, R);
+      }
       if (Ctx->getParent() != Ctx->getLexicalParent()) {
         // It is out of line defined C++ method or struct, we continue
         // doing name lookup in parent context. Once we will find namespace
@@ -611,8 +612,8 @@
         // using-directives later.
         for (OutOfLineCtx = Ctx; OutOfLineCtx && !OutOfLineCtx->isFileContext();
              OutOfLineCtx = OutOfLineCtx->getParent()) {
-          if ((R = LookupQualifiedName(OutOfLineCtx, Name, NameKind,
-                                      RedeclarationOnly)))
+          R = LookupQualifiedName(OutOfLineCtx, Name, NameKind, RedeclarationOnly);
+          if (R || RedeclarationOnly)
             return std::make_pair(true, R);
         }
       }