| // RUN: llvm-tblgen %s | FileCheck %s |
| // RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s |
| // XFAIL: vg_leak |
| |
| // CHECK: def A1 |
| // CHECK: code CodeCode = [{code here;}] |
| // CHECK: code StringCode = [{code here;}] |
| |
| // CHECK: def A2 |
| // CHECK: string CodeCode = "string here" |
| // CHECK: string StringCode = "string here" |
| |
| // CHECK: def B1 |
| // CHECK: string CodeCode = "with paste 7" |
| // CHECK: string StringCode = "with paste 7" |
| |
| // CHECK: def C1 |
| // CHECK: code CodeCode = [{with concat 42}] |
| // CHECK: code StringCode = [{with concat 42}] |
| |
| // CHECK: def D1 |
| // CHECK: code CodeCode = [{with concat 108!}] |
| // CHECK: code StringCode = [{with concat 108!}] |
| |
| class A<code c> { |
| code CodeCode = c; |
| string StringCode = c; |
| } |
| |
| def A1 : A<[{code here;}]>; |
| def A2 : A<"string here">; |
| |
| class B<int i> : A<"with paste " # i>; |
| class C<int i> : A<!strconcat([{with concat }], !cast<string>(i))>; |
| class D<int i> : A<!strconcat([{with concat }], !cast<string>(i), "!")>; |
| |
| def B1 : B<7>; |
| def C1 : C<42>; |
| def D1 : D<108>; |
| |
| #ifdef ERROR1 |
| |
| // ERROR1: the 'code' type is not allowed |
| |
| def Zerror1 { |
| code Code = !cast<code>("i = 0;"); |
| } |
| |
| #endif |