diff options
author | David Blaikie <dblaikie@gmail.com> | 2016-08-31 20:54:35 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2016-08-31 20:54:35 +0000 |
commit | 37dcf6bf9754ea87045453f536c9ebdb0358e24c (patch) | |
tree | b4f37470750333f453e891a06553caa47994af36 /clang/lib/Driver/Tools.cpp | |
parent | e3ea001ec8cd0770cff9d5e33ce269e409b1e70b (diff) | |
download | llvm-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.cpp | 20 |
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"); |