annotate llvm/test/TableGen/assert.td @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 2e18cbf3894f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 // RUN: not llvm-tblgen %s 2>&1 | FileCheck %s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 // Test the assert statement at top level.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 // CHECK-NOT: note: primary name is too short
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 // CHECK: note: primary name is too long
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 defvar Name = "Grace Brewster Murray Hopper";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 assert !ge(!size(Name), 20), "primary name is too short: " # Name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 assert !le(!size(Name), 20), "primary name is too long: " # Name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 // CHECK: note: first name is incorrect
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 def Rec01 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 string name = "Fred Smith";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 assert !eq(!substr(Rec01.name, 0, 3), "Jane"),
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 !strconcat("first name is incorrect: ", Rec01.name);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 // CHECK: note: record Rec02 is broken
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 def Rec02 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 bit broken = true;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 assert !not(Rec02.broken), "record Rec02 is broken";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 // CHECK: note: cube of 9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 class Cube<int n> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 int result = !mul(n, n, n);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 assert !eq(Cube<9>.result, 81), "cube of 9 should be 729";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 // CHECK: note: foreach i cannot be 2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 // CHECK-NOT: note: foreach i cannot be 2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 foreach i = 1...3 in {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 assert !ne(i, 2), "foreach i cannot be 2";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 def bar_ # i;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 // Test the assert statement in a record definition.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 // CHECK-NOT: primary first name is not "Grace"
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 // CHECK: primary first name is not "Grack"
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 // CHECK: foo field should be
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 def Rec10 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 assert !eq(!substr(Name, 0, 5), "Grace"), "primary first name is not \"Grace\"";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 assert !eq(!substr(Name, 0, 5), "Grack"), "primary first name is not \"Grack\"";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 string foo = "Foo";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 assert !eq(foo, "foo"), "foo field should be \"Foo\"";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 // CHECK: note: magic field is incorrect: 42
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 def Rec11 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 int magic = 13;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 assert !eq(magic, 13), "magic field is incorrect: " # magic;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 let magic = 42;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 // CHECK: note: var field has wrong value
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 def Rec12 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 defvar prefix = "foo_";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 string var = prefix # "snork";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 assert !eq(var, "foo_snorx"), "var field has wrong value: " # var;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 // CHECK: note: kind field has wrong value
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 class Kind {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 int kind = 7;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 def Rec13 : Kind {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 let kind = 8;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 assert !eq(kind, 7), "kind field has wrong value: " # kind;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 // CHECK: note: double_result should be
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 def Rec14 : Cube<3> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 int double_result = !mul(result, 2);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 assert !eq(double_result, 53), "double_result should be 54";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 // Test the assert statement in a class definition.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 class PersonName<string name> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 assert !le(!size(name), 32), "person name is too long: " # name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 string Name = name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 class Person<string name, int age> : PersonName<name> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 assert !and(!ge(age, 1), !le(age, 120)),
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 "person age is invalid: " # age;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 int Age = age;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 def Rec20 : Person<"Donald Knuth", 60>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 // CHECK: note: person name is too long
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 def Rec21 : Person<"Donald Uh Oh This Name Is Too Long Knuth", 50>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 // CHECK: note: person age is invalid
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 def Rec22 : Person<"Donald Knuth", 150>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 // Test the assert statement in an anonymous class invocation.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 def Rec30 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 string Name = Person<"Margaret Heafield Hamilton", 25>.Name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 int Age = Person<"Margaret Heafield Hamilton", 25>.Age;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 def Rec31 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 string Name = Person<"Margaret Heafield And More Middle Names Hamilton", 25>.Name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 int Age = Person<"Margaret Heafield Hamilton", 25>.Age;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 def Rec32 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 string Name = Person<"Margaret Heafield Hamilton", 25>.Name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 int Age = Person<"Margaret Heafield Hamilton", 0>.Age;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 // Test the assert statement in a multiclass.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 // CHECK: note: MC1 id string is too long
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 // CHECK: note: MC1 seq is too high
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 multiclass MC1<string id, int seq> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 assert !le(!size(id), 5), "MC1 id string is too long";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 assert !le(seq, 999999), "MC1 seq is too high";
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 def _mc1 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 string ID = id;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 int Seq = seq;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 defm Rec40 : MC1<"ILISP", 999>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 defm Rec41 : MC1<"ILISPX", 999>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 defm Rec42 : MC1<"ILISP", 999999999>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 // CHECK: note: MC2 phrase must be secret: secrex code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 multiclass MC2<string phr> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 assert !eq(!substr(phr, 0, 6), "secret"), "MC2 phrase must be secret: " # phr;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 def _mc2 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 string phrase = phr;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 multiclass MC3<string phr> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 defm _mc3 : MC2<phr>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 defm Rec43 : MC3<"secrex code">;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 // CHECK: note: MC2 phrase must be secret: xecret code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 multiclass MC4<string phr> : MC2<phr> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 def _def;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 defm Rec44 : MC4<"xecret code">;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 // Test a defm in a multiclass that inherits from a class with asserts.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 // CHECK: note: MC5 name must include a space: Ada_Lovelace
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 // CHECK: assertion failed
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 // CHECK: note: person age is invalid: 666
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 multiclass MC5<string phr, string name, int age> {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 assert !ne(!find(name, " "), -1), "MC5 name must include a space: " # name;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 defm _mc5 : MC2<phr>, Person<name, age>;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 defm Rec45 : MC5<"secret password", "Ada_Lovelace", 666>;