1
- // RUN: not llvm-tblgen %s 2>&1 | FileCheck %s
1
+ // RUN: not llvm-tblgen %s 2>&1 | FileCheck %s -DFILE=%s
2
2
3
+ // -----------------------------------------------------------------------------
3
4
// Test the assert statement at top level.
5
+ // -----------------------------------------------------------------------------
4
6
5
7
// CHECK: assertion failed
6
8
// CHECK-NOT: note: primary name is too short
@@ -48,33 +50,35 @@ foreach i = 1...3 in {
48
50
def bar_ # i;
49
51
}
50
52
53
+ // -----------------------------------------------------------------------------
51
54
// Test the assert statement in a record definition.
55
+ // -----------------------------------------------------------------------------
52
56
53
- // CHECK: assertion failed
57
+ // CHECK: [[FILE]]:[[@LINE+8]]:10: error: assertion failed
54
58
// CHECK-NOT: primary first name is not "Grace"
55
- // CHECK: primary first name is not "Grack"
56
- // CHECK: assertion failed
57
- // CHECK: foo field should be
58
-
59
+ // CHECK: note: primary first name is not "Grack"
60
+ // CHECK: [[FILE]]:[[@LINE+7]]:10: error: assertion failed
61
+ // CHECK: note: foo field should be
62
+ // CHECK: [[FILE]]:[[@LINE+1]]:5: error: assertion failed in this record
59
63
def Rec10 {
60
64
assert !eq(!substr(Name, 0, 5), "Grace"), "primary first name is not \"Grace\"";
61
65
assert !eq(!substr(Name, 0, 5), "Grack"), "primary first name is not \"Grack\"";
62
66
string foo = "Foo";
63
67
assert !eq(foo, "foo"), "foo field should be \"Foo\"";
64
68
}
65
69
66
- // CHECK: assertion failed
70
+ // CHECK: [[FILE]]:[[@LINE+5]]:10: error: assertion failed
67
71
// CHECK: note: magic field is incorrect: 42
68
-
72
+ // CHECK: [[FILE]]:[[@LINE+1]]:5: error: assertion failed in this record
69
73
def Rec11 {
70
74
int magic = 13;
71
75
assert !eq(magic, 13), "magic field is incorrect: " # magic;
72
76
let magic = 42;
73
77
}
74
78
75
- // CHECK: assertion failed
79
+ // CHECK: [[FILE]]:[[@LINE+6]]:10: error: assertion failed
76
80
// CHECK: note: var field has wrong value
77
-
81
+ // CHECK: [[FILE]]:[[@LINE+1]]:5: error: assertion failed in this record
78
82
def Rec12 {
79
83
defvar prefix = "foo_";
80
84
string var = prefix # "snork";
@@ -83,25 +87,27 @@ def Rec12 {
83
87
84
88
// CHECK: assertion failed
85
89
// CHECK: note: kind field has wrong value
86
-
87
90
class Kind {
88
91
int kind = 7;
89
92
}
90
93
94
+ // CHECK: [[FILE]]:[[@LINE+1]]:5: error: assertion failed in this record
91
95
def Rec13 : Kind {
92
96
let kind = 8;
93
97
assert !eq(kind, 7), "kind field has wrong value: " # kind;
94
98
}
95
99
96
100
// CHECK: assertion failed
97
101
// CHECK: note: double_result should be
98
-
102
+ // CHECK: [[FILE]]:[[@LINE+1]]:5: error: assertion failed in this record
99
103
def Rec14 : Cube<3> {
100
104
int double_result = !mul(result, 2);
101
105
assert !eq(double_result, 53), "double_result should be 54";
102
106
}
103
107
108
+ // -----------------------------------------------------------------------------
104
109
// Test the assert statement in a class definition.
110
+ // -----------------------------------------------------------------------------
105
111
106
112
class PersonName<string name> {
107
113
assert !le(!size(name), 32), "person name is too long: " # name;
@@ -118,32 +124,39 @@ def Rec20 : Person<"Donald Knuth", 60>;
118
124
119
125
// CHECK: assertion failed
120
126
// CHECK: note: person name is too long
121
-
127
+ // CHECK: [[FILE]]:[[@LINE+1]]:5: error: assertion failed in this record
122
128
def Rec21 : Person<"Donald Uh Oh This Name Is Too Long Knuth", 50>;
123
129
124
130
// CHECK: assertion failed
125
131
// CHECK: note: person age is invalid
126
-
132
+ // CHECK: [[FILE]]:[[@LINE+1]]:5: error: assertion failed in this record
127
133
def Rec22 : Person<"Donald Knuth", 150>;
128
134
129
135
// Test the assert statement in an anonymous class invocation.
130
-
131
136
def Rec30 {
132
137
string Name = Person<"Margaret Heafield Hamilton", 25>.Name;
133
138
int Age = Person<"Margaret Heafield Hamilton", 25>.Age;
134
139
}
135
140
141
+ // CHECK: assertion failed
142
+ // CHECK: note: person name is too long
143
+ // CHECK: [[FILE]]:[[@LINE+2]]:17: error: assertion failed in this record
136
144
def Rec31 {
137
145
string Name = Person<"Margaret Heafield And More Middle Names Hamilton", 25>.Name;
138
146
int Age = Person<"Margaret Heafield Hamilton", 25>.Age;
139
147
}
140
148
149
+ // CHECK: assertion failed
150
+ // CHECK: note: person age is invalid: 0
151
+ // CHECK: [[FILE]]:[[@LINE+3]]:13: error: assertion failed in this record
141
152
def Rec32 {
142
153
string Name = Person<"Margaret Heafield Hamilton", 25>.Name;
143
154
int Age = Person<"Margaret Heafield Hamilton", 0>.Age;
144
155
}
145
156
157
+ // -----------------------------------------------------------------------------
146
158
// Test the assert statement in a multiclass.
159
+ // -----------------------------------------------------------------------------
147
160
148
161
// CHECK: assertion failed
149
162
// CHECK: note: MC1 id string is too long
0 commit comments