mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-21 21:29:41 +00:00
Filter option names to escape symbols not allowed as C++ identifiers.
Makes it possible to use options with names like "Wa,". Also fixes the -Wall option handling as a side-effect. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50973 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ecb977e64f
commit
5c98d824f6
12
test/LLVMC/wall.c
Normal file
12
test/LLVMC/wall.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* Check that -Wall works as intended
|
||||||
|
* RUN: llvmc2 -Wall %s -o %t
|
||||||
|
* RUN: ./%t | grep hello
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
printf("hello\n");
|
||||||
|
return 0;
|
||||||
|
}
|
@ -71,7 +71,7 @@ def llvm_gcc_assembler : Tool<
|
|||||||
(cmd_line "llvm-gcc -c -x assembler $INFILE -o $OUTFILE"),
|
(cmd_line "llvm-gcc -c -x assembler $INFILE -o $OUTFILE"),
|
||||||
(switch_option "c", (stop_compilation),
|
(switch_option "c", (stop_compilation),
|
||||||
(help "Compile and assemble, but do not link")),
|
(help "Compile and assemble, but do not link")),
|
||||||
(prefix_list_option "Wa", (unpack_values), (help "pass options to assembler"))
|
(prefix_list_option "Wa,", (unpack_values), (help "pass options to assembler"))
|
||||||
]>;
|
]>;
|
||||||
|
|
||||||
// Default linker
|
// Default linker
|
||||||
@ -83,7 +83,7 @@ def llvm_gcc_linker : Tool<
|
|||||||
(join),
|
(join),
|
||||||
(prefix_list_option "L", (forward), (help "add a directory to link path")),
|
(prefix_list_option "L", (forward), (help "add a directory to link path")),
|
||||||
(prefix_list_option "l", (forward), (help "search a library when linking")),
|
(prefix_list_option "l", (forward), (help "search a library when linking")),
|
||||||
(prefix_list_option "Wl", (unpack_values), (help "pass options to linker"))
|
(prefix_list_option "Wl,", (unpack_values), (help "pass options to linker"))
|
||||||
]>;
|
]>;
|
||||||
|
|
||||||
// Alternative linker for C++
|
// Alternative linker for C++
|
||||||
@ -97,7 +97,7 @@ def llvm_gcc_cpp_linker : Tool<
|
|||||||
(help "Choose linker (possible values: gcc, g++)")),
|
(help "Choose linker (possible values: gcc, g++)")),
|
||||||
(prefix_list_option "L", (forward)),
|
(prefix_list_option "L", (forward)),
|
||||||
(prefix_list_option "l", (forward)),
|
(prefix_list_option "l", (forward)),
|
||||||
(prefix_list_option "Wl", (unpack_values))
|
(prefix_list_option "Wl,", (unpack_values))
|
||||||
]>;
|
]>;
|
||||||
|
|
||||||
// Language map
|
// Language map
|
||||||
|
@ -135,19 +135,36 @@ struct OptionDescription {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Escape commas and other symbols not allowed in the C++ variable
|
||||||
|
// names. Makes it possible to use options with names like "Wa,"
|
||||||
|
// (useful for prefix options).
|
||||||
|
std::string EscapeVariableName(const std::string& Var) const {
|
||||||
|
std::string ret;
|
||||||
|
for (unsigned i = 0; i != Var.size(); ++i) {
|
||||||
|
if (Var[i] == ',') {
|
||||||
|
ret += "_comma_";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret.push_back(Var[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
std::string GenVariableName() const {
|
std::string GenVariableName() const {
|
||||||
|
const std::string& EscapedName = EscapeVariableName(Name);
|
||||||
switch (Type) {
|
switch (Type) {
|
||||||
case OptionType::Switch:
|
case OptionType::Switch:
|
||||||
return "AutoGeneratedSwitch" + Name;
|
return "AutoGeneratedSwitch" + EscapedName;
|
||||||
case OptionType::Prefix:
|
case OptionType::Prefix:
|
||||||
return "AutoGeneratedPrefix" + Name;
|
return "AutoGeneratedPrefix" + EscapedName;
|
||||||
case OptionType::PrefixList:
|
case OptionType::PrefixList:
|
||||||
return "AutoGeneratedPrefixList" + Name;
|
return "AutoGeneratedPrefixList" + EscapedName;
|
||||||
case OptionType::Parameter:
|
case OptionType::Parameter:
|
||||||
return "AutoGeneratedParameter" + Name;
|
return "AutoGeneratedParameter" + EscapedName;
|
||||||
case OptionType::ParameterList:
|
case OptionType::ParameterList:
|
||||||
default:
|
default:
|
||||||
return "AutoGeneratedParameterList" + Name;
|
return "AutoGeneratedParameterList" + EscapedName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user