]> granicus.if.org Git - clang/commitdiff
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.

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

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

index 50199e0f01bbb33da2c92607e159a655e406dcac..cb68eb07e6d06604006ab63e74d67763bb2d66a0 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 ef61a258bd60f5c2f475cc59e4bc5b9462d549a6..6766e1be9c155cd453043558696d372405b986d5 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/test/Index/skip-parsed-bodies/imported.h b/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;
+}
index 0df28d055860e1d02d63a1a4f8e07ebc5fb68975..93fff44de5ab967774b9d8ced9c0162bed1142b9 100644 (file)
@@ -1,2 +1,3 @@
 #include "t.h"
 #include "pragma_once.h"
+#import "imported.h"
index 0df28d055860e1d02d63a1a4f8e07ebc5fb68975..93fff44de5ab967774b9d8ced9c0162bed1142b9 100644 (file)
@@ -1,2 +1,3 @@
 #include "t.h"
 #include "pragma_once.h"
+#import "imported.h"