]> granicus.if.org Git - clang/commitdiff
Do an early check for function definition.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sun, 5 Jul 2009 22:21:17 +0000 (22:21 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sun, 5 Jul 2009 22:21:17 +0000 (22:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74796 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/ResolveLocation.cpp

index d7a9b4852a96ff62fb8a73f182ab6d185a9b5aff..fd5cacf127e8933b7b277af341fef8b457dfcdf4 100644 (file)
@@ -197,6 +197,9 @@ void DeclLocResolver::VisitFunctionDecl(FunctionDecl *D) {
   
   // We didn't found the location in the parameters and we didn't get passed it.
   
+  if (!D->isThisDeclarationADefinition())
+    return;
+
   // Second, search through the declarations that are part of the function.
   // If we find he location there, we won't have to search through its body.
   DeclLocResolver DLR(Ctx, Loc);
@@ -209,16 +212,15 @@ void DeclLocResolver::VisitFunctionDecl(FunctionDecl *D) {
   // We didn't find a declaration that corresponds to the source location.
   
   // Finally, search through the body of the function.
-  if (D->isThisDeclarationADefinition()) {
-    StmtLocResolver SLR(Ctx, Loc);
-    SLR.Visit(D->getBody());
-    if (SLR.FoundIt()) {
-      llvm::tie(Dcl, Stm) = SLR.getResult();
-      // If we didn't find a more immediate 'parent' declaration for the
-      // statement, set the function as the parent.
-      if (Dcl == 0)
-        Dcl = D;
-    }
+  assert(D->getBody() && "Expected definition");
+  StmtLocResolver SLR(Ctx, Loc);
+  SLR.Visit(D->getBody());
+  if (SLR.FoundIt()) {
+    llvm::tie(Dcl, Stm) = SLR.getResult();
+    // If we didn't find a more immediate 'parent' declaration for the
+    // statement, set the function as the parent.
+    if (Dcl == 0)
+      Dcl = D;
   }
 }