// RUN: llvm-tblgen %s | FileCheck %s
// RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s

// Tests for the true and false literals.

defvar otherwise = true;
defvar do_it = true;

// CHECK: def rec1
// CHECK:   bit flag1 = 1;
// CHECK:   bit flag2 = 0;
// CHECK:   int true_int = 1;

def rec1 {
  bit flag1 = true;
  bit flag2 = false;
  int true_int = true;
}

// CHECK: def rec2_true

if true then
  def rec2_true {}
else
  def rec2_bad {}

// CHECK: def rec3_false

if false then
  def rec3_bad {}
else
  def rec3_false {}

// CHECK: def rec4
// CHECK:   int value = 52;

def rec4 {
  int value = !add(10, !if(!and(do_it, true), 42, 0));
}

// CHECK: def rec5
// CHECK:    string name = "snork";

def rec5 {
  string name = !cond(false:       "foo",
                      !not(do_it): "bar",
                      otherwise:   "snork");
}

// CHECK: def rec6
// CHECK:   bit xorFF = 0;
// CHECK:   bit xorFT = 1;
// CHECK:   bit xorTF = 1;
// CHECK:   bit xorTT = 0;

def rec6 {
  bit xorFF = !xor(false, false);
  bit xorFT = !xor(false, true);
  bit xorTF = !xor(true, false);
  bit xorTT = !xor(true, true);
}

// CHECK: def rec7
// CHECK:   bits<3> flags = { 1, 0, 1 };

def rec7 {
  bits<3> flags = { true, false, true };
}

#ifdef ERROR1
// ERROR1: Record name '1' is not a string

def true {}
#endif

