// 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")]>;

