| // Test for the OptionPreprocessor and related functionality. |
| // RUN: tblgen -I %p/../../include --gen-llvmc %s -o %t |
| // RUN: FileCheck -input-file %t %s |
| // RUN: %compile_cxx %t |
| // XFAIL: vg_leak |
| |
| include "llvm/CompilerDriver/Common.td" |
| |
| def OptList : OptionList<[ |
| (switch_option "foo", (help "dummy")), |
| (switch_option "bar", (help "dummy")), |
| (switch_option "baz", (help "dummy")), |
| (parameter_option "foo_p", (help "dummy")), |
| (parameter_option "bar_p", (help "dummy")), |
| (parameter_option "baz_p", (help "dummy")), |
| (parameter_list_option "foo_l", (help "dummy")) |
| ]>; |
| |
| def Preprocess : OptionPreprocessor< |
| (case |
| // CHECK: W1 |
| // CHECK: foo = false; |
| // CHECK: foo_p = ""; |
| // CHECK: foo_l.clear(); |
| (and (switch_on "foo"), (any_switch_on "bar", "baz")), |
| [(warning "W1"), (unset_option "foo"), |
| (unset_option "foo_p"), (unset_option "foo_l")], |
| // CHECK: W2 |
| // CHECK: foo = true; |
| // CHECK: bar = true; |
| // CHECK: baz = false; |
| // CHECK: foo_p = "asdf"; |
| // CHECK: foo_l.clear(); |
| // CHECK: foo_l.push_back("qwert"); |
| // CHECK: foo_l.push_back("yuiop"); |
| // CHECK: foo_l.push_back("asdf"); |
| (and (switch_on "foo", "bar"), (any_empty "foo_p", "bar_p")), |
| [(warning "W2"), (set_option "foo"), |
| (set_option "bar", true), |
| (set_option "baz", false), |
| (set_option "foo_p", "asdf"), |
| (set_option "foo_l", ["qwert", "yuiop", "asdf"])], |
| // CHECK: W3 |
| // CHECK: foo = true; |
| // CHECK: bar = true; |
| // CHECK: baz = true; |
| (and (empty "foo_p", "bar_p"), (any_not_empty "baz_p")), |
| [(warning "W3"), (set_option "foo", "bar", "baz")]) |
| >; |
| |
| // Shut up warnings... |
| def dummy : Tool< |
| [(in_language "dummy"), |
| (out_language "dummy"), |
| (output_suffix "d"), |
| (command "dummy"), |
| (actions (case (switch_on "foo"), (error), |
| (switch_on "bar"), (error), |
| (switch_on "baz"), (error), |
| (not_empty "foo_p"), (error), |
| (not_empty "bar_p"), (error), |
| (not_empty "baz_p"), (error), |
| (not_empty "foo_l"), (error))) |
| ]>; |
| |
| def Graph : CompilationGraph<[(edge "root", "dummy")]>; |
| |