Skip to content

Commit 70195f3

Browse files
Merge pull request #1515 from apple/revert-1444-refactor_clang_extra_flags
Revert "NFC: Refactor clang extra args addition"
2 parents 34fece8 + 7d14674 commit 70195f3

File tree

2 files changed

+51
-39
lines changed

2 files changed

+51
-39
lines changed

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.cpp

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1448,66 +1448,39 @@ void ApplyWorkingDir(SmallString &clang_argument, StringRef cur_working_dir) {
14481448
llvm::sys::path::append(clang_argument, cur_working_dir, rel_path);
14491449
llvm::sys::path::remove_dots(clang_argument);
14501450
}
1451-
1452-
std::array<StringRef, 2> macro_flags = { "-D", "-U" };
1453-
1454-
bool IsMultiArgClangFlag(StringRef arg) {
1455-
for (auto &flag : macro_flags)
1456-
if (flag == arg)
1457-
return true;
1458-
return arg == "-working-directory";
1459-
}
1460-
1461-
bool IsMacroDefinition(StringRef arg) {
1462-
for (auto &flag : macro_flags)
1463-
if (arg.startswith(flag))
1464-
return true;
1465-
return false;
1466-
}
1467-
1468-
bool ShouldUnique(StringRef arg) {
1469-
return IsMacroDefinition(arg);
1470-
}
14711451
} // namespace
14721452

14731453
void SwiftASTContext::AddExtraClangArgs(std::vector<std::string> ExtraArgs) {
1474-
swift::ClangImporterOptions &importer_options = GetClangImporterOptions();
1475-
llvm::DenseSet<StringRef> unique_flags;
1476-
for (auto &arg : importer_options.ExtraArgs)
1477-
unique_flags.insert(arg);
1478-
14791454
llvm::SmallString<128> cur_working_dir;
14801455
llvm::SmallString<128> clang_argument;
14811456
for (const std::string &arg : ExtraArgs) {
1482-
// Join multi-arg options for uniquing.
1457+
// Join multi-arg -D and -U options for uniquing.
14831458
clang_argument += arg;
1484-
if (IsMultiArgClangFlag(clang_argument))
1459+
if (clang_argument == "-D" || clang_argument == "-U" ||
1460+
clang_argument == "-working-directory")
14851461
continue;
14861462

14871463
auto clear_arg = llvm::make_scope_exit([&] { clang_argument.clear(); });
14881464

1465+
// Enable uniquing for -D and -U options.
1466+
bool is_macro = (clang_argument.size() >= 2 && clang_argument[0] == '-' &&
1467+
(clang_argument[1] == 'D' || clang_argument[1] == 'U'));
1468+
bool unique = is_macro;
1469+
14891470
// Consume any -working-directory arguments.
14901471
StringRef cwd(clang_argument);
14911472
if (cwd.consume_front("-working-directory")) {
14921473
cur_working_dir = cwd;
14931474
continue;
14941475
}
14951476
// Drop -Werror; it would only cause trouble in the debugger.
1496-
if (clang_argument.startswith("-Werror"))
1477+
if (clang_argument.startswith("-Werror")) {
14971478
continue;
1498-
1499-
if (clang_argument.empty())
1500-
continue;
1501-
1479+
}
15021480
// Otherwise add the argument to the list.
1503-
if (!IsMacroDefinition(clang_argument))
1481+
if (!is_macro)
15041482
ApplyWorkingDir(clang_argument, cur_working_dir);
1505-
1506-
auto clang_arg_str = clang_argument.str();
1507-
if (!ShouldUnique(clang_argument) || !unique_flags.count(clang_arg_str)) {
1508-
importer_options.ExtraArgs.push_back(clang_arg_str);
1509-
unique_flags.insert(clang_arg_str);
1510-
}
1483+
AddClangArgument(clang_argument.str(), unique);
15111484
}
15121485
}
15131486

@@ -3414,6 +3387,41 @@ swift::DWARFImporterDelegate *SwiftASTContext::GetDWARFImporterDelegate() {
34143387
return m_dwarf_importer_delegate_up.get();
34153388
}
34163389

3390+
bool SwiftASTContext::AddClangArgument(std::string clang_arg, bool unique) {
3391+
if (clang_arg.empty())
3392+
return false;
3393+
3394+
swift::ClangImporterOptions &importer_options = GetClangImporterOptions();
3395+
// Avoid inserting the same option twice.
3396+
if (unique)
3397+
for (std::string &arg : importer_options.ExtraArgs)
3398+
if (arg == clang_arg)
3399+
return false;
3400+
3401+
importer_options.ExtraArgs.push_back(clang_arg);
3402+
return true;
3403+
}
3404+
3405+
bool SwiftASTContext::AddClangArgumentPair(StringRef clang_arg_1,
3406+
StringRef clang_arg_2) {
3407+
if (clang_arg_1.empty() || clang_arg_2.empty())
3408+
return false;
3409+
3410+
swift::ClangImporterOptions &importer_options = GetClangImporterOptions();
3411+
bool add_hmap = true;
3412+
for (ssize_t ai = 0, ae = importer_options.ExtraArgs.size() -
3413+
1; // -1 because we look at the next one too
3414+
ai < ae; ++ai) {
3415+
if (clang_arg_1.equals(importer_options.ExtraArgs[ai]) &&
3416+
clang_arg_2.equals(importer_options.ExtraArgs[ai + 1]))
3417+
return false;
3418+
}
3419+
3420+
importer_options.ExtraArgs.push_back(clang_arg_1);
3421+
importer_options.ExtraArgs.push_back(clang_arg_2);
3422+
return true;
3423+
}
3424+
34173425
const swift::SearchPathOptions *SwiftASTContext::GetSearchPathOptions() const {
34183426
VALID_OR_RETURN(0);
34193427

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ class SwiftASTContext : public TypeSystemSwift {
215215

216216
bool AddModuleSearchPath(llvm::StringRef path);
217217

218+
bool AddClangArgument(std::string arg, bool unique = true);
219+
220+
bool AddClangArgumentPair(llvm::StringRef arg1, llvm::StringRef arg2);
221+
218222
/// Add a list of Clang arguments to the ClangImporter options and
219223
/// apply the working directory to any relative paths.
220224
void AddExtraClangArgs(std::vector<std::string> ExtraArgs);

0 commit comments

Comments
 (0)