From 44dfff681fdca5325bc684c46971efad1f3fedfd Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Mon, 10 Dec 2012 20:08:37 +0000 Subject: [PATCH] Return true from HeaderSearch::isFileMultipleIncludeGuarded if the file was #import'ed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169761 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Lex/HeaderSearch.cpp | 3 ++- test/Index/skip-parsed-bodies/compile_commands.json | 5 +++++ test/Index/skip-parsed-bodies/imported.h | 5 +++++ test/Index/skip-parsed-bodies/t2.cpp | 1 + test/Index/skip-parsed-bodies/t3.cpp | 1 + 5 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 test/Index/skip-parsed-bodies/imported.h diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index 50199e0f01..cb68eb07e6 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -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) { diff --git a/test/Index/skip-parsed-bodies/compile_commands.json b/test/Index/skip-parsed-bodies/compile_commands.json index ef61a258bd..6766e1be9c 100644 --- a/test/Index/skip-parsed-bodies/compile_commands.json +++ b/test/Index/skip-parsed-bodies/compile_commands.json @@ -47,8 +47,11 @@ // 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 index 0000000000..86673e1231 --- /dev/null +++ b/test/Index/skip-parsed-bodies/imported.h @@ -0,0 +1,5 @@ +extern int some_val; + +static inline int imp_foo() { + ++some_val; return undef_impval; +} diff --git a/test/Index/skip-parsed-bodies/t2.cpp b/test/Index/skip-parsed-bodies/t2.cpp index 0df28d0558..93fff44de5 100644 --- a/test/Index/skip-parsed-bodies/t2.cpp +++ b/test/Index/skip-parsed-bodies/t2.cpp @@ -1,2 +1,3 @@ #include "t.h" #include "pragma_once.h" +#import "imported.h" diff --git a/test/Index/skip-parsed-bodies/t3.cpp b/test/Index/skip-parsed-bodies/t3.cpp index 0df28d0558..93fff44de5 100644 --- a/test/Index/skip-parsed-bodies/t3.cpp +++ b/test/Index/skip-parsed-bodies/t3.cpp @@ -1,2 +1,3 @@ #include "t.h" #include "pragma_once.h" +#import "imported.h" -- 2.40.0