forked from OSchip/llvm-project
Use backslashes to escape spaces and other backslashes in -dwarf-debug-flags.
The command line options are specified in a space-separated list that is an argument to -dwarf-debug-flags, so that breaks if there are spaces in the options. This feature came from Apple's internal version of GCC, so I went back to check how llvm-gcc handled this and matched that behavior. rdar://problem/18775420 llvm-svn: 221309
This commit is contained in:
parent
f9660f0712
commit
d5aad2a1e0
|
@ -83,6 +83,23 @@ static void CheckCodeGenerationOptions(const Driver &D, const ArgList &Args) {
|
||||||
<< A->getAsString(Args) << "-static";
|
<< A->getAsString(Args) << "-static";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add backslashes to escape spaces and other backslashes.
|
||||||
|
// This is used for the space-separated argument list specified with
|
||||||
|
// the -dwarf-debug-flags option.
|
||||||
|
static void EscapeSpacesAndBackslashes(const char *Arg,
|
||||||
|
SmallVectorImpl<char> &Res) {
|
||||||
|
for ( ; *Arg; ++Arg) {
|
||||||
|
switch (*Arg) {
|
||||||
|
default: break;
|
||||||
|
case ' ':
|
||||||
|
case '\\':
|
||||||
|
Res.push_back('\\');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Res.push_back(*Arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Quote target names for inclusion in GNU Make dependency files.
|
// Quote target names for inclusion in GNU Make dependency files.
|
||||||
// Only the characters '$', '#', ' ', '\t' are quoted.
|
// Only the characters '$', '#', ' ', '\t' are quoted.
|
||||||
static void QuoteTarget(StringRef Target,
|
static void QuoteTarget(StringRef Target,
|
||||||
|
@ -4465,8 +4482,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
SmallString<256> Flags;
|
SmallString<256> Flags;
|
||||||
Flags += Exec;
|
Flags += Exec;
|
||||||
for (unsigned i = 0, e = OriginalArgs.size(); i != e; ++i) {
|
for (unsigned i = 0, e = OriginalArgs.size(); i != e; ++i) {
|
||||||
|
SmallString<128> EscapedArg;
|
||||||
|
EscapeSpacesAndBackslashes(OriginalArgs[i], EscapedArg);
|
||||||
Flags += " ";
|
Flags += " ";
|
||||||
Flags += OriginalArgs[i];
|
Flags += EscapedArg;
|
||||||
}
|
}
|
||||||
CmdArgs.push_back("-dwarf-debug-flags");
|
CmdArgs.push_back("-dwarf-debug-flags");
|
||||||
CmdArgs.push_back(Args.MakeArgString(Flags.str()));
|
CmdArgs.push_back(Args.MakeArgString(Flags.str()));
|
||||||
|
@ -4896,8 +4915,10 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
const char *Exec = getToolChain().getDriver().getClangProgramPath();
|
const char *Exec = getToolChain().getDriver().getClangProgramPath();
|
||||||
Flags += Exec;
|
Flags += Exec;
|
||||||
for (unsigned i = 0, e = OriginalArgs.size(); i != e; ++i) {
|
for (unsigned i = 0, e = OriginalArgs.size(); i != e; ++i) {
|
||||||
|
SmallString<128> EscapedArg;
|
||||||
|
EscapeSpacesAndBackslashes(OriginalArgs[i], EscapedArg);
|
||||||
Flags += " ";
|
Flags += " ";
|
||||||
Flags += OriginalArgs[i];
|
Flags += EscapedArg;
|
||||||
}
|
}
|
||||||
CmdArgs.push_back("-dwarf-debug-flags");
|
CmdArgs.push_back("-dwarf-debug-flags");
|
||||||
CmdArgs.push_back(Args.MakeArgString(Flags.str()));
|
CmdArgs.push_back(Args.MakeArgString(Flags.str()));
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// RUN: env RC_DEBUG_OPTIONS=1 %clang -target i386-apple-darwin9 -g -Os %s -emit-llvm -S -o - | FileCheck %s
|
// RUN: env RC_DEBUG_OPTIONS=1 %clang -target i386-apple-darwin9 -I "path with \spaces" -g -Os %s -emit-llvm -S -o - | FileCheck %s
|
||||||
// <rdar://problem/7256886>
|
// <rdar://problem/7256886>
|
||||||
// RUN: touch %t.s
|
// RUN: touch %t.s
|
||||||
// RUN: env RC_DEBUG_OPTIONS=1 %clang -### -target i386-apple-darwin9 -c -g %t.s 2>&1 | FileCheck -check-prefix=S %s
|
// RUN: env RC_DEBUG_OPTIONS=1 %clang -### -target i386-apple-darwin9 -c -g %t.s 2>&1 | FileCheck -check-prefix=S %s
|
||||||
|
@ -6,6 +6,7 @@
|
||||||
// RUN: %clang -### -target i386-apple-darwin9 -c -g %t.s 2>&1 | FileCheck -check-prefix=P %s
|
// RUN: %clang -### -target i386-apple-darwin9 -c -g %t.s 2>&1 | FileCheck -check-prefix=P %s
|
||||||
|
|
||||||
// CHECK: !0 = metadata !{
|
// CHECK: !0 = metadata !{
|
||||||
|
// CHECK: -I path\5C with\5C \5C\5Cspaces
|
||||||
// CHECK: -g -Os
|
// CHECK: -g -Os
|
||||||
// CHECK: -mmacosx-version-min=10.5.0
|
// CHECK: -mmacosx-version-min=10.5.0
|
||||||
// CHECK: [ DW_TAG_compile_unit ]
|
// CHECK: [ DW_TAG_compile_unit ]
|
||||||
|
|
Loading…
Reference in New Issue