xref: /aosp_15_r20/external/llvm/test/TableGen/subst.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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