Return true from HeaderSearch::isFileMultipleIncludeGuarded if the file
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 10 Dec 2012 20:08:37 +0000 (20:08 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 10 Dec 2012 20:08:37 +0000 (20:08 +0000)
was #import'ed.

llvm-svn: 169761

clang/lib/Lex/HeaderSearch.cpp
clang/test/Index/skip-parsed-bodies/compile_commands.json
clang/test/Index/skip-parsed-bodies/imported.h [new file with mode: 0644]
clang/test/Index/skip-parsed-bodies/t2.cpp
clang/test/Index/skip-parsed-bodies/t3.cpp

index 50199e0..cb68eb0 100644 (file)
@@ -749,7 +749,8 @@ bool HeaderSearch::isFileMultipleIncludeGuarded(const FileEntry *File) {
   if (ExternalSource && !HFI.Resolved)
     mergeHeaderFileInfo(HFI, ExternalSource->GetHeaderFileInfo(File));
 
-  return HFI.isPragmaOnce || HFI.ControllingMacro || HFI.ControllingMacroID;
+  return HFI.isPragmaOnce || HFI.isImport ||
+      HFI.ControllingMacro || HFI.ControllingMacroID;
 }
 
 void HeaderSearch::setHeaderFileInfoForUID(HeaderFileInfo HFI, unsigned UID) {
index ef61a25..6766e1b 100644 (file)
 // CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./t.h:25:5
 // CHECK:      [indexDeclaration]: kind: c++-instance-method | name: tsmeth | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: 1
 // CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./pragma_once.h:8:7
+// CHECK:      [indexDeclaration]: kind: function | name: imp_foo | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: 1
+// CHECK-NEXT: [indexEntityReference]: kind: variable | name: some_val | {{.*}} | loc: ./imported.h:4:5
 // CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_val4'
 // CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_tsval'
+// CHECK-NEXT: [diagnostic]: {{.*}} undeclared identifier 'undef_impval'
 
 // CHECK-NEXT: [enteredMainFile]: t3.cpp
 // CHECK:      [indexDeclaration]: kind: c++-instance-method | name: method_decl | {{.*}} | isRedecl: 0 | isDef: 0 | isContainer: 0
@@ -63,4 +66,6 @@
 // CHECK-NEXT: [indexDeclaration]: kind: variable | {{.*}} | loc: ./pragma_once.h:3:12
 // CHECK:      [indexDeclaration]: kind: c++-instance-method | name: tsmeth | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
 // CHECK-NOT:  [indexEntityReference]: kind: variable | name: some_val |
+// CHECK:      [indexDeclaration]: kind: function | name: imp_foo | {{.*}} | isRedecl: 0 | isDef: 1 | isContainer: skipped
+// CHECK-NOT:  [indexEntityReference]: kind: variable | name: some_val |
 // CHECK-NOT:  [diagnostic]: {{.*}} undeclared identifier
diff --git a/clang/test/Index/skip-parsed-bodies/imported.h b/clang/test/Index/skip-parsed-bodies/imported.h
new file mode 100644 (file)
index 0000000..86673e1
--- /dev/null
@@ -0,0 +1,5 @@
+extern int some_val;
+
+static inline int imp_foo() {
+  ++some_val; return undef_impval;
+}