aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/LLVMC/wall.c12
-rw-r--r--tools/llvmc2/Tools.td6
-rw-r--r--utils/TableGen/LLVMCConfigurationEmitter.cpp27
3 files changed, 37 insertions, 8 deletions
diff --git a/test/LLVMC/wall.c b/test/LLVMC/wall.c
new file mode 100644
index 0000000..9af9bfb
--- /dev/null
+++ b/test/LLVMC/wall.c
@@ -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;
+}
diff --git a/tools/llvmc2/Tools.td b/tools/llvmc2/Tools.td
index 2692562..5a614cf 100644
--- a/tools/llvmc2/Tools.td
+++ b/tools/llvmc2/Tools.td
@@ -71,7 +71,7 @@ def llvm_gcc_assembler : Tool<
(cmd_line "llvm-gcc -c -x assembler $INFILE -o $OUTFILE"),
(switch_option "c", (stop_compilation),
(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
@@ -83,7 +83,7 @@ def llvm_gcc_linker : Tool<
(join),
(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 "Wl", (unpack_values), (help "pass options to linker"))
+ (prefix_list_option "Wl,", (unpack_values), (help "pass options to linker"))
]>;
// Alternative linker for C++
@@ -97,7 +97,7 @@ def llvm_gcc_cpp_linker : Tool<
(help "Choose linker (possible values: gcc, g++)")),
(prefix_list_option "L", (forward)),
(prefix_list_option "l", (forward)),
- (prefix_list_option "Wl", (unpack_values))
+ (prefix_list_option "Wl,", (unpack_values))
]>;
// Language map
diff --git a/utils/TableGen/LLVMCConfigurationEmitter.cpp b/utils/TableGen/LLVMCConfigurationEmitter.cpp
index 1947aa5..8e4d870 100644
--- a/utils/TableGen/LLVMCConfigurationEmitter.cpp
+++ b/utils/TableGen/LLVMCConfigurationEmitter.cpp
@@ -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 {
+ const std::string& EscapedName = EscapeVariableName(Name);
switch (Type) {
case OptionType::Switch:
- return "AutoGeneratedSwitch" + Name;
+ return "AutoGeneratedSwitch" + EscapedName;
case OptionType::Prefix:
- return "AutoGeneratedPrefix" + Name;
+ return "AutoGeneratedPrefix" + EscapedName;
case OptionType::PrefixList:
- return "AutoGeneratedPrefixList" + Name;
+ return "AutoGeneratedPrefixList" + EscapedName;
case OptionType::Parameter:
- return "AutoGeneratedParameter" + Name;
+ return "AutoGeneratedParameter" + EscapedName;
case OptionType::ParameterList:
default:
- return "AutoGeneratedParameterList" + Name;
+ return "AutoGeneratedParameterList" + EscapedName;
}
}