cpsauer created this revision. cpsauer added reviewers: nridge, sammccall, kadircet. Herald added a subscriber: arphaman. Herald added a project: All. cpsauer requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
This preserves --target and -target flags in the system includes extractor, which is needed for cross-compiling to, e.g. Android, since the target flags can influence the default include paths. Note that, like isysroot (which is handled incorrectly above and elsewhere), the target flag doesn't fit cleanly into the ArgsToPreserve abstraction and does indeed have a different number of - in its = and non = forms. (ref <https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-isysroot-dir>) There are plenty of bugs in this file, but this is an incremental improvement. For more context, please see https://github.com/clangd/clangd/issues/1378 Thanks for all you do, wonderful LLVM folks :) Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D138546 Files: clang-tools-extra/clangd/SystemIncludeExtractor.cpp Index: clang-tools-extra/clangd/SystemIncludeExtractor.cpp =================================================================== --- clang-tools-extra/clangd/SystemIncludeExtractor.cpp +++ clang-tools-extra/clangd/SystemIncludeExtractor.cpp @@ -184,13 +184,18 @@ const llvm::StringRef FlagsToPreserve[] = { "-nostdinc", "--no-standard-includes", "-nostdinc++", "-nobuiltininc"}; // Preserves these flags and their values, either as separate args or with an - // equalsbetween them + // equals between them const llvm::StringRef ArgsToPreserve[] = {"--sysroot", "-isysroot"}; for (size_t I = 0, E = CommandLine.size(); I < E; ++I) { llvm::StringRef Arg = CommandLine[I]; if (llvm::is_contained(FlagsToPreserve, Arg)) { Args.push_back(Arg); + } else if (Arg.startswith("--target=")) { + Args.push_back(Arg); + } else if (I + 1 < E && Arg.equals("-target")) { + Args.push_back(CommandLine[I]); + Args.push_back(CommandLine[++I]); } else { const auto *Found = llvm::find_if(ArgsToPreserve, [&Arg](llvm::StringRef S) {
Index: clang-tools-extra/clangd/SystemIncludeExtractor.cpp =================================================================== --- clang-tools-extra/clangd/SystemIncludeExtractor.cpp +++ clang-tools-extra/clangd/SystemIncludeExtractor.cpp @@ -184,13 +184,18 @@ const llvm::StringRef FlagsToPreserve[] = { "-nostdinc", "--no-standard-includes", "-nostdinc++", "-nobuiltininc"}; // Preserves these flags and their values, either as separate args or with an - // equalsbetween them + // equals between them const llvm::StringRef ArgsToPreserve[] = {"--sysroot", "-isysroot"}; for (size_t I = 0, E = CommandLine.size(); I < E; ++I) { llvm::StringRef Arg = CommandLine[I]; if (llvm::is_contained(FlagsToPreserve, Arg)) { Args.push_back(Arg); + } else if (Arg.startswith("--target=")) { + Args.push_back(Arg); + } else if (I + 1 < E && Arg.equals("-target")) { + Args.push_back(CommandLine[I]); + Args.push_back(CommandLine[++I]); } else { const auto *Found = llvm::find_if(ArgsToPreserve, [&Arg](llvm::StringRef S) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits