// 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