diff options
| author | Ted Kremenek <kremenek@apple.com> | 2008-05-31 00:27:00 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2008-05-31 00:27:00 +0000 |
| commit | a3774667d3b490d10a208695b2ce147414f59a8f (patch) | |
| tree | 311a915f4f78b5d9759d463d71285816d3e1b751 /clang/Driver/clang.cpp | |
| parent | 66002283e68a4b3bbb1e99935e151065a5e883f8 (diff) | |
| download | bcm5719-llvm-a3774667d3b490d10a208695b2ce147414f59a8f.tar.gz bcm5719-llvm-a3774667d3b490d10a208695b2ce147414f59a8f.zip | |
Correctly preserve the order between -F and -I options.
llvm-svn: 51803
Diffstat (limited to 'clang/Driver/clang.cpp')
| -rw-r--r-- | clang/Driver/clang.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/clang/Driver/clang.cpp b/clang/Driver/clang.cpp index 84df9de971a..7a61145c66c 100644 --- a/clang/Driver/clang.cpp +++ b/clang/Driver/clang.cpp @@ -870,13 +870,23 @@ static void AddEnvVarPaths(const char *Name, HeaderSearch &Headers) { /// HeaderSearch object. static void InitializeIncludePaths(const char *Argv0, HeaderSearch &Headers, FileManager &FM, const LangOptions &Lang) { - // Handle -F... options. - for (unsigned i = 0, e = F_dirs.size(); i != e; ++i) - AddPath(F_dirs[i], Angled, false, true, true, Headers); + // Handle -I... and -F... options, walking the lists in parallel. + unsigned Iidx = 0, Fidx = 0; + while (Iidx < I_dirs.size() && Fidx < F_dirs.size()) { + if (I_dirs.getPosition(Iidx) < F_dirs.getPosition(Fidx)) { + AddPath(I_dirs[Iidx], Angled, false, true, false, Headers); + ++Iidx; + } else { + AddPath(F_dirs[Fidx], Angled, false, true, true, Headers); + ++Fidx; + } + } - // Handle -I... options. - for (unsigned i = 0, e = I_dirs.size(); i != e; ++i) - AddPath(I_dirs[i], Angled, false, true, false, Headers); + // Consume what's left from whatever list was longer. + for (; Iidx != I_dirs.size(); ++Iidx) + AddPath(I_dirs[Iidx], Angled, false, true, false, Headers); + for (; Fidx != F_dirs.size(); ++Fidx) + AddPath(F_dirs[Fidx], Angled, false, true, true, Headers); // Handle -idirafter... options. for (unsigned i = 0, e = idirafter_dirs.size(); i != e; ++i) |

