From 35ec7f07b82c49eeda6c3ca887ebc2d34206b9de Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Fri, 2 Dec 2016 09:51:51 +0000 Subject: [PATCH] [Frontend] Fix an issue where a quoted search path is incorrectly removed as a duplicate header search path The commit r126167 started passing the First index into RemoveDuplicates, but forgot to update 0 to First in the loop that looks for the duplicate. This resulted in a bug where an -iquoted search path was incorrectly removed if you passed in the same path into -iquote and more than one time into -isystem. rdar://23991350 Differential Revision: https://reviews.llvm.org/D27298 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@288491 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Frontend/InitHeaderSearch.cpp | 2 +- test/Frontend/include-duplicate-removal.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 test/Frontend/include-duplicate-removal.c diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp index c76ccea8ac..d50fb6d788 100644 --- a/lib/Frontend/InitHeaderSearch.cpp +++ b/lib/Frontend/InitHeaderSearch.cpp @@ -526,7 +526,7 @@ static unsigned RemoveDuplicates(std::vector &SearchList, if (CurEntry.getDirCharacteristic() != SrcMgr::C_User) { // Find the dir that this is the same of. unsigned FirstDir; - for (FirstDir = 0; ; ++FirstDir) { + for (FirstDir = First;; ++FirstDir) { assert(FirstDir != i && "Didn't find dupe?"); const DirectoryLookup &SearchEntry = SearchList[FirstDir]; diff --git a/test/Frontend/include-duplicate-removal.c b/test/Frontend/include-duplicate-removal.c new file mode 100644 index 0000000000..fb02cd7e48 --- /dev/null +++ b/test/Frontend/include-duplicate-removal.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -v -I%S/Inputs -iquote %S/Inputs/SystemHeaderPrefix -isystem %S/Inputs/SystemHeaderPrefix -isystem %S/Inputs/SystemHeaderPrefix %s 2>&1 | FileCheck %s + +#include + +// CHECK: ignoring duplicate directory +// CHECK-SAME: Inputs/SystemHeaderPrefix"{{$}} + +// CHECK: #include "..." +// CHECK-NEXT: {{.*}}Inputs/SystemHeaderPrefix{{$}} +// CHECK-NEXT: #include <...> +// CHECK-NEXT: {{.*}}Inputs{{$}} +// CHECK-NEXT: {{.*}}Inputs/SystemHeaderPrefix{{$}} -- 2.40.0