]> granicus.if.org Git - clang/commitdiff
[PCH] When keeping track of top-level decls for "targeted deserialization"
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 24 Feb 2012 01:12:38 +0000 (01:12 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 24 Feb 2012 01:12:38 +0000 (01:12 +0000)
make sure we don't mistake ParmVarDecls for top-level decls.

Fixes rdar://10920009.

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

lib/Serialization/ASTWriter.cpp
test/Index/targeted-cursor.m [new file with mode: 0644]
test/Index/targeted-cursor.m.h [new file with mode: 0644]

index 8dbd6e447150cd0bf99648a1cdf8beafeaa4c378..66e5d6a625e83456e39c3135f1a798e31c073696 100644 (file)
@@ -3860,6 +3860,9 @@ void ASTWriter::associateDeclWithFile(const Decl *D, DeclID ID) {
   // We only keep track of the file-level declarations of each file.
   if (!D->getLexicalDeclContext()->isFileContext())
     return;
+  // FIXME: We should never have ParmVarDecls with TU as context.
+  if (isa<ParmVarDecl>(D))
+    return;
 
   SourceManager &SM = Context->getSourceManager();
   SourceLocation FileLoc = SM.getFileLoc(Loc);
diff --git a/test/Index/targeted-cursor.m b/test/Index/targeted-cursor.m
new file mode 100644 (file)
index 0000000..94c62e8
--- /dev/null
@@ -0,0 +1,6 @@
+
+// rdar://10920009
+// RUN: c-index-test -write-pch %t.h.pch -x objective-c-header %S/targeted-cursor.m.h -Xclang -detailed-preprocessing-record
+// RUN: c-index-test -cursor-at=%S/targeted-cursor.m.h:5:13 %s -include %t.h | FileCheck %s
+
+// CHECK: ObjCClassRef=I:2:12
diff --git a/test/Index/targeted-cursor.m.h b/test/Index/targeted-cursor.m.h
new file mode 100644 (file)
index 0000000..735c7bd
--- /dev/null
@@ -0,0 +1,7 @@
+
+@interface I
+
+-(void)mm:(void (^)(I*))block;
+-(void)mm2:(I*)i;
+
+@end