1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
// 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 a, int b = 2, int c = 3> {
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<a=1, c=3, b=2>;
multiclass TestMultiClass<int a, int b = 2, int c = 3> {
def "": TestClass<a, b=b, c=c>;
}
// 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<a=1, b=2, c=3>;
class TestSubroutine<int a, int b=a>{
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<b=1, a=1>.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<a=1, b=1, b=1>;
#endif
|