| // 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!">; | 
 |  |