diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/TableGen/if-type.td | 11 | ||||
| -rw-r--r-- | llvm/test/TableGen/if.td | 24 |
2 files changed, 35 insertions, 0 deletions
diff --git a/llvm/test/TableGen/if-type.td b/llvm/test/TableGen/if-type.td new file mode 100644 index 00000000000..809195be007 --- /dev/null +++ b/llvm/test/TableGen/if-type.td @@ -0,0 +1,11 @@ +// RUN: not llvm-tblgen %s 2>&1 | FileCheck %s +// XFAIL: vg_leak + +class A<int dummy> {} +class B<int dummy> : A<dummy> {} +class C<int dummy> : A<dummy> {} + +// CHECK: Value 'x' of type 'C' is incompatible with initializer '{{.*}}' of type 'A' +class X<int cc, B b, C c> { + C x = !if(cc, b, c); +} diff --git a/llvm/test/TableGen/if.td b/llvm/test/TableGen/if.td index 019e4dd1585..a6af59e7283 100644 --- a/llvm/test/TableGen/if.td +++ b/llvm/test/TableGen/if.td @@ -73,6 +73,30 @@ def DI1: I1<1>; // CHECK-NEXT: int i = 0; def DI2: I2<1>; +// Check that !if with operands of different subtypes can initialize a +// supertype variable. +// +// CHECK: def EXd1 { +// CHECK: E x = E1d; +// CHECK: } +// +// CHECK: def EXd2 { +// CHECK: E x = E2d; +// CHECK: } +class E<int dummy> {} +class E1<int dummy> : E<dummy> {} +class E2<int dummy> : E<dummy> {} + +class EX<int cc, E1 b, E2 c> { + E x = !if(cc, b, c); +} + +def E1d : E1<0>; +def E2d : E2<0>; + +def EXd1 : EX<1, E1d, E2d>; +def EXd2 : EX<0, E1d, E2d>; + // CHECK: def One // CHECK-NEXT: list<int> first = [1, 2, 3]; // CHECK-NEXT: list<int> rest = [1, 2, 3]; |

