]> granicus.if.org Git - clang/commitdiff
[index] Make sure that declarations of builtin functions are indexed.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 17 Mar 2016 04:28:19 +0000 (04:28 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Thu, 17 Mar 2016 04:28:19 +0000 (04:28 +0000)
rdar://25154630

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263689 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Index/IndexingContext.cpp
test/Index/Core/index-source.m

index 0a235afc28bdb7dca846cb52f86b1ff3604dda63..3d1d9902dd61b14eee23bcebb838da43f875f00c 100644 (file)
@@ -290,14 +290,17 @@ bool IndexingContext::handleDeclOccurrence(const Decl *D, SourceLocation Loc,
     Roles |= (unsigned)SymbolRole::Declaration;
 
   D = getCanonicalDecl(D);
-  if (D->isImplicit() && !isa<ObjCMethodDecl>(D)) {
+  if (D->isImplicit() && !isa<ObjCMethodDecl>(D) &&
+      !(isa<FunctionDecl>(D) && cast<FunctionDecl>(D)->getBuiltinID())) {
     // operator new declarations will link to the implicit one as canonical.
     return true;
   }
   Parent = adjustParent(Parent);
   if (Parent)
     Parent = getCanonicalDecl(Parent);
-  assert((!Parent || !Parent->isImplicit() || isa<FunctionDecl>(Parent) ||
+  assert((!Parent || !Parent->isImplicit() ||
+          (isa<FunctionDecl>(Parent) &&
+           cast<FunctionDecl>(Parent)->getBuiltinID()) ||
           isa<ObjCInterfaceDecl>(Parent) || isa<ObjCMethodDecl>(Parent)) &&
          "unexpected implicit parent!");
 
index 6248f18bfb51c28cbf3b8d1061a621e9d6d1a5f4..ac309c8e6965be06e2bebcd5e2d27205b9edb1e3 100644 (file)
@@ -68,5 +68,6 @@ enum {
 
 // CHECK: [[@LINE+1]]:13 | typedef/C | jmp_buf | c:index-source.m@T@jmp_buf | <no-cgname> | Def | rel: 0
 typedef int jmp_buf[(18)];
+// CHECK: [[@LINE+2]]:12 | function/C | setjmp | c:@F@setjmp | _setjmp | Decl | rel: 0
 // CHECK: [[@LINE+1]]:19 | typedef/C | jmp_buf | c:index-source.m@T@jmp_buf | <no-cgname> | Ref | rel: 0
 extern int setjmp(jmp_buf);