// 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 // RUN: not llvm-tblgen -DERROR3 %s 2>&1 | FileCheck --check-prefix=ERROR3 %s // RUN: not llvm-tblgen -DERROR4 %s 2>&1 | FileCheck --check-prefix=ERROR4 %s // RUN: not llvm-tblgen -DERROR5 %s 2>&1 | FileCheck --check-prefix=ERROR5 %s // RUN: not llvm-tblgen -DERROR6 %s 2>&1 | FileCheck --check-prefix=ERROR6 %s // RUN: not llvm-tblgen -DERROR7 %s 2>&1 | FileCheck --check-prefix=ERROR7 %s // RUN: not llvm-tblgen -DERROR8 %s 2>&1 | FileCheck --check-prefix=ERROR8 %s class TestClass { int value = !add(a, b, c); } // CHECK: def testClass1 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testClass2 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testClass3 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testClass4 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testClass5 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testClass6 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testClass7 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testClass8 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } def testClass1: TestClass<1>; def testClass2: TestClass<1, 2>; def testClass3: TestClass<1, 2, 3>; def testClass4: TestClass<1, b=2>; def testClass5: TestClass<1, c=3>; def testClass6: TestClass<1, b=2, c=3>; def testClass7: TestClass<1, c=3, b=2>; def testClass8: TestClass; multiclass TestMultiClass { def "": TestClass; } // CHECK: def testMultiClass1 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testMultiClass2 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testMultiClass3 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testMultiClass4 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testMultiClass5 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testMultiClass6 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testMultiClass7 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } // CHECK: def testMultiClass8 { // CHECK-NEXT: int value = 6; // CHECK-NEXT: } defm testMultiClass1: TestMultiClass<1>; defm testMultiClass2: TestMultiClass<1, 2>; defm testMultiClass3: TestMultiClass<1, 2, 3>; defm testMultiClass4: TestMultiClass<1, b=2>; defm testMultiClass5: TestMultiClass<1, c=3>; defm testMultiClass6: TestMultiClass<1, b=2, c=3>; defm testMultiClass7: TestMultiClass<1, c=3, b=2>; defm testMultiClass8: TestMultiClass; class TestSubroutine{ int value=!add(a, b); } // CHECK: def testSubroutine { // CHECK-NEXT: int value1 = 2; // CHECK-NEXT: int value2 = 2; // CHECK-NEXT: int value3 = 2; // CHECK-NEXT: } def testSubroutine { int value1=TestSubroutine<1>.value; int value2=TestSubroutine<1, b=1>.value; int value3=TestSubroutine.value; } #ifdef ERROR1 // ERROR1: Argument "d" doesn't exist def testError1: TestClass<1, d=3>; #endif #ifdef ERROR2 // ERROR2: The name of named argument should be a valid identifier def testError2: TestClass<1, 3=0>; #endif #ifdef ERROR3 // ERROR3: Positional argument should be put before named argument def testError3: TestClass<1, b=1, 2>; #endif #ifdef ERROR4 // ERROR4: The value of named argument should be initialized, but we got '?' def testError4: TestClass<1, b=?>; #endif #ifdef ERROR5 // ERROR5: We can only specify the template argument 'TestClass:a' once def testError5: TestClass<1, a=1>; #endif #ifdef ERROR6 // ERROR6: We can only specify the template argument 'TestMultiClass::a' once defm testError6: TestMultiClass<1, a=1>; #endif #ifdef ERROR7 // ERROR7: We can only specify the template argument 'TestSubroutine:a' once def testError7 { int value=TestSubroutine<1, a=1>.value; } #endif #ifdef ERROR8 // ERROR8: We can only specify the template argument 'TestClass:b' once def testError8: TestClass; #endif