1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-tblgen %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker// XFAIL: vg_leak 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerclass Honorific<string t> { 5*9880d681SAndroid Build Coastguard Worker string honorific = t; 6*9880d681SAndroid Build Coastguard Worker} 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdef Mr : Honorific<"Mr.">; 9*9880d681SAndroid Build Coastguard Workerdef Ms : Honorific<"Ms.">; 10*9880d681SAndroid Build Coastguard Workerdef Mrs : Honorific<"Mrs.">; 11*9880d681SAndroid Build Coastguard Workerdef TVAR : Honorific<"Bogus">; 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerclass Name<string n, Honorific t> { 14*9880d681SAndroid Build Coastguard Worker string name = n; 15*9880d681SAndroid Build Coastguard Worker Honorific honorific = t; 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerclass AName<string name, Honorific honorific> : 19*9880d681SAndroid Build Coastguard Worker Name<!subst("FIRST", "John", !subst("LAST", "Smith", name)), 20*9880d681SAndroid Build Coastguard Worker !subst(TVAR, Mr, honorific)>; 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdef JohnSmith : AName<"FIRST LAST", TVAR>; 23*9880d681SAndroid Build Coastguard Workerdef JaneSmith : AName<"Jane LAST", Ms>; 24*9880d681SAndroid Build Coastguard Workerdef JohnSmithJones : AName<"FIRST LAST-Jones", Mr>; 25*9880d681SAndroid Build Coastguard Workerdef JimmyJohnson : AName<"Jimmy Johnson", Mr>; 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker// CHECK: ------------- Classes ----------------- 28*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: class AName<string AName:name = ?, Honorific AName:honorific = ?> { 29*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string name = !subst("FIRST", "John", !subst("LAST", "Smith", AName:name)); 30*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Honorific honorific = !subst(TVAR, Mr, AName:honorific); 31*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 32*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 33*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: class Honorific<string Honorific:t = ?> { 34*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string honorific = Honorific:t; 35*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 36*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 37*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: class Name<string Name:n = ?, Honorific Name:t = ?> { 38*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string name = Name:n; 39*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Honorific honorific = Name:t; 40*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 41*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 42*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: ------------- Defs ----------------- 43*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def JaneSmith { 44*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string name = "Jane Smith"; 45*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Honorific honorific = Ms; 46*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 47*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 48*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def JimmyJohnson { 49*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string name = "Jimmy Johnson"; 50*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Honorific honorific = Mr; 51*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 52*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 53*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def JohnSmith { 54*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string name = "John Smith"; 55*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Honorific honorific = Mr; 56*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 57*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 58*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def JohnSmithJones { 59*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string name = "John Smith-Jones"; 60*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: Honorific honorific = Mr; 61*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 62*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 63*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def Mr 64*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string honorific = "Mr."; 65*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 66*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 67*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def Mrs { 68*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string honorific = "Mrs."; 69*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 70*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 71*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def Ms { 72*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string honorific = "Ms."; 73*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 74*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 75*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: def TVAR { 76*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string honorific = "Bogus"; 77*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: string NAME = ?; 78*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: } 79