Fix forwarding of -fpack-struct from driver to CC1, and add a test.

-fpack-struct's handling has changed in CC1 (one of only two flags that needed changing) because the driver treats "-fpack-struct" as a boolean flag, and CC1 (did) treat it as an option with a separated value.

This change causes -fpack-struct=X to be forwarded correctly to -fpack-struct=X instead of erroneously to "-fpack-struct X"

llvm-svn: 155981
This commit is contained in:
James Molloy 2012-05-02 07:56:14 +00:00
parent b6625979a2
commit cebf75e8ca
2 changed files with 14 additions and 4 deletions

View File

@ -2500,12 +2500,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// Honor -fpack-struct= and -fpack-struct, if given. Note that
// -fno-pack-struct doesn't apply to -fpack-struct=.
if (Arg *A = Args.getLastArg(options::OPT_fpack_struct_EQ)) {
CmdArgs.push_back("-fpack-struct");
CmdArgs.push_back(A->getValue(Args));
std::string PackStructStr = "-fpack-struct=";
PackStructStr += A->getValue(Args);
CmdArgs.push_back(Args.MakeArgString(PackStructStr));
} else if (Args.hasFlag(options::OPT_fpack_struct,
options::OPT_fno_pack_struct, false)) {
CmdArgs.push_back("-fpack-struct");
CmdArgs.push_back("1");
CmdArgs.push_back("-fpack-struct=1");
}
if (Args.hasArg(options::OPT_mkernel) ||

View File

@ -0,0 +1,10 @@
// RUN: %clang -fpack-struct -### %s 2> %t
// RUN: FileCheck < %t %s
// RUN: %clang -fpack-struct=8 -### %s 2> %t
// RUN: FileCheck < %t %s --check-prefix=EQ
// CHECK: "-cc1"
// CHECK: "-fpack-struct=1"
// CHECK-EQ: "-cc1"
// CHECK-EQ: "-fpack-struct=8"