// RUN: llvm-tblgen %s | FileCheck %s // XFAIL: vg_leak // Test !size of lists. // CHECK: --- Defs --- // CHECK: def A1 { // CHECK: int Val = 0; // CHECK: } // CHECK: def A2 { // CHECK: int Val = 3; // CHECK: } // CHECK: def B1 { // CHECK: int Val = 0; // CHECK: } // CHECK: def B2 { // CHECK: int Val = 2; // CHECK: } class A<list<int> L> { int Val = !size(L); } class B<list<string> L> { int Val = !size(L); } def A1 : A<[]>; def A2 : A<[1, 1, 2]>; def B1 : B<[]>; def B2 : B<["a", "b"]>; // Test !size of DAGs. // CHECK: def D0 { // CHECK: int Val = 0; // CHECK: } // CHECK: def D1 { // CHECK: int Val = 1; // CHECK: } // CHECK: def D2 { // CHECK: int Val = 2; // CHECK: } // CHECK: def D3 { // CHECK: int Val = 3; // CHECK: } // CHECK: def D4 { // CHECK: int Val = 4; // CHECK: } class D<dag D> { int Val = !size(D); } def op; def D0 : D<(op)>; def D1 : D<(op "string")>; def D2 : D<(op "string", 42)>; def D3 : D<(op "string", 42, (op "sub-dag"))>; def D4 : D<(op "string", 42, (op "sub-dag"), D0.Val)>; // Test !size of strings. // CHECK: def S0 { // CHECK: int Val = 0; // CHECK: } // CHECK: def S1 { // CHECK: int Val = 1; // CHECK: } // CHECK: def S2 { // CHECK: int Val = 2; // CHECK: } // CHECK: def S3 { // CHECK: int Val = 3; // CHECK: } // CHECK: def S4 { // CHECK: int Val = 29; // CHECK: } class S<string S> { int Val = !size(S); } def S0 : S<"">; def S1 : S<"a">; def S2 : S<"ab">; def S3 : S<"abc">; def S4 : S<"This is the end of the world!">;