140 lines · plain
1// RUN: llvm-tblgen %s | FileCheck %s2// RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s3// RUN: not llvm-tblgen -DERROR2 %s 2>&1 | FileCheck --check-prefix=ERROR2 %s4// RUN: not llvm-tblgen -DERROR3 %s 2>&1 | FileCheck --check-prefix=ERROR3 %s5// RUN: not llvm-tblgen -DERROR4 %s 2>&1 | FileCheck --check-prefix=ERROR4 %s6// RUN: not llvm-tblgen -DERROR5 %s 2>&1 | FileCheck --check-prefix=ERROR5 %s7// RUN: not llvm-tblgen -DERROR6 %s 2>&1 | FileCheck --check-prefix=ERROR6 %s8// RUN: not llvm-tblgen -DERROR7 %s 2>&1 | FileCheck --check-prefix=ERROR7 %s9// RUN: not llvm-tblgen -DERROR8 %s 2>&1 | FileCheck --check-prefix=ERROR8 %s10 11class TestClass<int a, int b = 2, int c = 3> {12 int value = !add(a, b, c);13}14// CHECK: def testClass1 {15// CHECK-NEXT: int value = 6;16// CHECK-NEXT: }17// CHECK: def testClass2 {18// CHECK-NEXT: int value = 6;19// CHECK-NEXT: }20// CHECK: def testClass3 {21// CHECK-NEXT: int value = 6;22// CHECK-NEXT: }23// CHECK: def testClass4 {24// CHECK-NEXT: int value = 6;25// CHECK-NEXT: }26// CHECK: def testClass5 {27// CHECK-NEXT: int value = 6;28// CHECK-NEXT: }29// CHECK: def testClass6 {30// CHECK-NEXT: int value = 6;31// CHECK-NEXT: }32// CHECK: def testClass7 {33// CHECK-NEXT: int value = 6;34// CHECK-NEXT: }35// CHECK: def testClass8 {36// CHECK-NEXT: int value = 6;37// CHECK-NEXT: }38def testClass1: TestClass<1>;39def testClass2: TestClass<1, 2>;40def testClass3: TestClass<1, 2, 3>;41def testClass4: TestClass<1, b=2>;42def testClass5: TestClass<1, c=3>;43def testClass6: TestClass<1, b=2, c=3>;44def testClass7: TestClass<1, c=3, b=2>;45def testClass8: TestClass<a=1, c=3, b=2>;46 47multiclass TestMultiClass<int a, int b = 2, int c = 3> {48 def "": TestClass<a, b=b, c=c>;49}50 51// CHECK: def testMultiClass1 {52// CHECK-NEXT: int value = 6;53// CHECK-NEXT: }54// CHECK: def testMultiClass2 {55// CHECK-NEXT: int value = 6;56// CHECK-NEXT: }57// CHECK: def testMultiClass3 {58// CHECK-NEXT: int value = 6;59// CHECK-NEXT: }60// CHECK: def testMultiClass4 {61// CHECK-NEXT: int value = 6;62// CHECK-NEXT: }63// CHECK: def testMultiClass5 {64// CHECK-NEXT: int value = 6;65// CHECK-NEXT: }66// CHECK: def testMultiClass6 {67// CHECK-NEXT: int value = 6;68// CHECK-NEXT: }69// CHECK: def testMultiClass7 {70// CHECK-NEXT: int value = 6;71// CHECK-NEXT: }72// CHECK: def testMultiClass8 {73// CHECK-NEXT: int value = 6;74// CHECK-NEXT: }75defm testMultiClass1: TestMultiClass<1>;76defm testMultiClass2: TestMultiClass<1, 2>;77defm testMultiClass3: TestMultiClass<1, 2, 3>;78defm testMultiClass4: TestMultiClass<1, b=2>;79defm testMultiClass5: TestMultiClass<1, c=3>;80defm testMultiClass6: TestMultiClass<1, b=2, c=3>;81defm testMultiClass7: TestMultiClass<1, c=3, b=2>;82defm testMultiClass8: TestMultiClass<a=1, b=2, c=3>;83 84class TestSubroutine<int a, int b=a>{85 int value=!add(a, b);86}87 88// CHECK: def testSubroutine {89// CHECK-NEXT: int value1 = 2;90// CHECK-NEXT: int value2 = 2;91// CHECK-NEXT: int value3 = 2;92// CHECK-NEXT: }93def testSubroutine {94 int value1=TestSubroutine<1>.value;95 int value2=TestSubroutine<1, b=1>.value;96 int value3=TestSubroutine<b=1, a=1>.value;97}98 99#ifdef ERROR1100// ERROR1: Argument "d" doesn't exist101def testError1: TestClass<1, d=3>;102#endif103 104#ifdef ERROR2105// ERROR2: The name of named argument should be a valid identifier106def testError2: TestClass<1, 3=0>;107#endif108 109#ifdef ERROR3110// ERROR3: Positional argument should be put before named argument111def testError3: TestClass<1, b=1, 2>;112#endif113 114#ifdef ERROR4115// ERROR4: The value of named argument should be initialized, but we got '?'116def testError4: TestClass<1, b=?>;117#endif118 119#ifdef ERROR5120// ERROR5: We can only specify the template argument 'TestClass:a' once121def testError5: TestClass<1, a=1>;122#endif123 124#ifdef ERROR6125// ERROR6: We can only specify the template argument 'TestMultiClass::a' once126defm testError6: TestMultiClass<1, a=1>;127#endif128 129#ifdef ERROR7130// ERROR7: We can only specify the template argument 'TestSubroutine:a' once131def testError7 {132 int value=TestSubroutine<1, a=1>.value;133}134#endif135 136#ifdef ERROR8137// ERROR8: We can only specify the template argument 'TestClass:b' once138def testError8: TestClass<a=1, b=1, b=1>;139#endif140