aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2016-08-31 20:54:35 +0000
committerDavid Blaikie <dblaikie@gmail.com>2016-08-31 20:54:35 +0000
commit37dcf6bf9754ea87045453f536c9ebdb0358e24c (patch)
treeb4f37470750333f453e891a06553caa47994af36 /clang/lib/Driver/Tools.cpp
parente3ea001ec8cd0770cff9d5e33ce269e409b1e70b (diff)
downloadllvm-37dcf6bf9754ea87045453f536c9ebdb0358e24c.zip
llvm-37dcf6bf9754ea87045453f536c9ebdb0358e24c.tar.gz
llvm-37dcf6bf9754ea87045453f536c9ebdb0358e24c.tar.bz2
DebugInfo: Fix -gsplit-dwarf + -fno-split-dwarf-inlining
I tested the cases involving split-dwarf + gmlt + no-split-dwarf-inlining, but didn't verify the simpler case without gmlt. The logic is, admittedly, a little hairy, but seems about as simple as I could wrangle it. llvm-svn: 280290
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 129b25c..98724ee 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -4602,8 +4602,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
bool splitDwarfInlining =
Args.hasFlag(options::OPT_fsplit_dwarf_inlining,
options::OPT_fno_split_dwarf_inlining, true);
- if (!splitDwarfInlining)
- CmdArgs.push_back("-fno-split-dwarf-inlining");
Args.ClaimAllArgs(options::OPT_g_Group);
Arg *SplitDwarfArg = Args.getLastArg(options::OPT_gsplit_dwarf);
@@ -4619,11 +4617,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// split-dwarf and line-tables-only, so let those compose naturally in
// that case.
// And if you just turned off debug info, (-gsplit-dwarf -g0) - do that.
- if (SplitDwarfArg && A->getIndex() > SplitDwarfArg->getIndex() &&
- ((DebugInfoKind == codegenoptions::DebugLineTablesOnly &&
- splitDwarfInlining) ||
- DebugInfoKind == codegenoptions::NoDebugInfo))
- SplitDwarfArg = nullptr;
+ if (SplitDwarfArg) {
+ if (A->getIndex() > SplitDwarfArg->getIndex()) {
+ if (DebugInfoKind == codegenoptions::NoDebugInfo ||
+ (DebugInfoKind == codegenoptions::DebugLineTablesOnly &&
+ splitDwarfInlining))
+ SplitDwarfArg = nullptr;
+ } else if (splitDwarfInlining)
+ DebugInfoKind = codegenoptions::NoDebugInfo;
+ }
} else
// For any other 'g' option, use Limited.
DebugInfoKind = codegenoptions::LimitedDebugInfo;
@@ -4678,7 +4680,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// splitting and extraction.
// FIXME: Currently only works on Linux.
if (getToolChain().getTriple().isOSLinux() && SplitDwarfArg) {
- if (splitDwarfInlining)
+ if (!splitDwarfInlining)
+ CmdArgs.push_back("-fno-split-dwarf-inlining");
+ if (DebugInfoKind == codegenoptions::NoDebugInfo)
DebugInfoKind = codegenoptions::LimitedDebugInfo;
CmdArgs.push_back("-backend-option");
CmdArgs.push_back("-split-dwarf=Enable");