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

// Test at top level.

// CHECK-NOT: def aNo
// CHECK: def aYes
if 0 then def aNo;
if 1 then def aYes;

// Test inside a foreach, with condition based on the iteration variable.

// CHECK: def bNotThree1
// CHECK: def bNotThree2
// CHECK: def bNotThree4
// CHECK: def bThree3
foreach i = 1-4 in {
  if !eq(i, 3) then {
    def "bThree" # i;
  } else {
    def "bNotThree" # i;
  }
}

// Test inside a multiclass, with condition based on a multiclass parameter.

multiclass Multi<int i> {
  def Unconditional;

  if !eq(i, 2) then
    def Cond;

  if !ge(i, 3) then
    def ThenRec;
  else
    def ElseRec;
}

// CHECK-NOT: def c1Cond
// CHECK: def c1ElseRec
// CHECK-NOT: def c1ThenRec
// CHECK: def c1Unconditional
defm c1: Multi<1>;

// CHECK: def c2Cond
// CHECK: def c2ElseRec
// CHECK-NOT: def c2ThenRec
// CHECK: def c2Unconditional
defm c2: Multi<2>;

// CHECK-NOT: def c3Cond
// CHECK-NOT: def c3ElseRec
// CHECK: def c3ThenRec
// CHECK: def c3Unconditional
defm c3: Multi<3>;

// Test resolution of the dangling-else ambiguity.

// CHECK: def dThenElse00
// CHECK-NOT: def dThenElse1
// CHECK-NOT: def dThenElse11
// CHECK: def dThenThen01
foreach i = 0-1 in
  foreach j = 0-1 in
    if !eq(i,0) then
      if !eq(j,1) then
        def "dThenThen"#i#j;
      else // binds to the inner if, not the outer one
        def "dThenElse"#i#j;

// Error tests: ensure you can't put an if inside a def or class.

#ifdef ERROR1
def baddef {
  int x = 3;
  // ERROR1: [[@LINE+1]]:3: error: Unknown token when expecting a type
  if 1 then {
    int y = 4;
  }
}
#endif

#ifdef ERROR2
class badclass<int i> {
  int x = 3;
  // ERROR2: [[@LINE+1]]:3: error: Unknown token when expecting a type
  if !eq(i, 5) then {
    int y = 4;
  }
}
#endif
