badcode.asl revision 1.1.1.2.4.2 1 1.1.1.2.4.2 rmind /*
2 1.1.1.2.4.2 rmind * badcode.asl
3 1.1.1.2.4.2 rmind *
4 1.1.1.2.4.2 rmind * This file contains examples of the extended error checking and
5 1.1.1.2.4.2 rmind * typechecking capabilities of the iASL compiler. Other ASL compilers
6 1.1.1.2.4.2 rmind * may ignore these errors completely. Note - this is not an exhaustive
7 1.1.1.2.4.2 rmind * list of errors detected by iASL, it shows many of the errors that
8 1.1.1.2.4.2 rmind * are not detected by other ASL compilers.
9 1.1.1.2.4.2 rmind *
10 1.1.1.2.4.2 rmind * To compile, use:
11 1.1.1.2.4.2 rmind * iasl badcode.asl
12 1.1.1.2.4.2 rmind */
13 1.1.1.2.4.2 rmind DefinitionBlock ("badcode.aml", "DSDT", 1, "Intel", "Example", 0x00000001)
14 1.1.1.2.4.2 rmind {
15 1.1.1.2.4.2 rmind Name (INT1, 0)
16 1.1.1.2.4.2 rmind Name (BUF1, Buffer() {0,1,2,3})
17 1.1.1.2.4.2 rmind Event (EVT1)
18 1.1.1.2.4.2 rmind
19 1.1.1.2.4.2 rmind // Invalid SyncLevel in Mutex declaration
20 1.1.1.2.4.2 rmind
21 1.1.1.2.4.2 rmind Mutex (MTX1, 32)
22 1.1.1.2.4.2 rmind
23 1.1.1.2.4.2 rmind // Integer beyond the table integer size (32 bits)
24 1.1.1.2.4.2 rmind
25 1.1.1.2.4.2 rmind Name (BIG, 0x1234567887654321)
26 1.1.1.2.4.2 rmind
27 1.1.1.2.4.2 rmind // CPackage length does not match initializer list length
28 1.1.1.2.4.2 rmind
29 1.1.1.2.4.2 rmind Name (PKG1, Package(5) {0,1})
30 1.1.1.2.4.2 rmind
31 1.1.1.2.4.2 rmind // Inadvertent use of single backslash in a string
32 1.1.1.2.4.2 rmind
33 1.1.1.2.4.2 rmind Name (PATH, Buffer() {"\_SB_.PCI2._CRS"})
34 1.1.1.2.4.2 rmind
35 1.1.1.2.4.2 rmind // Invalid hex escape sequence
36 1.1.1.2.4.2 rmind
37 1.1.1.2.4.2 rmind Name (ESC1, "abcdefg\x00hijklmn")
38 1.1.1.2.4.2 rmind
39 1.1.1.2.4.2 rmind // Field access beyond region bounds
40 1.1.1.2.4.2 rmind
41 1.1.1.2.4.2 rmind OperationRegion (OPR1, SystemMemory, 0x2000, 6)
42 1.1.1.2.4.2 rmind Field (OPR1, DWordAcc, NoLock, Preserve)
43 1.1.1.2.4.2 rmind {
44 1.1.1.2.4.2 rmind Offset (4),
45 1.1.1.2.4.2 rmind FLD1, 8
46 1.1.1.2.4.2 rmind }
47 1.1.1.2.4.2 rmind
48 1.1.1.2.4.2 rmind // Some address spaces support only ByteAcc or BufferAcc
49 1.1.1.2.4.2 rmind
50 1.1.1.2.4.2 rmind OperationRegion (OPR2, EmbeddedControl, 0x4000, 8)
51 1.1.1.2.4.2 rmind Field (OPR2, DWordAcc, NoLock, Preserve)
52 1.1.1.2.4.2 rmind {
53 1.1.1.2.4.2 rmind FLD2, 8
54 1.1.1.2.4.2 rmind }
55 1.1.1.2.4.2 rmind OperationRegion (OPR3, SMBus, 0x8000, 16)
56 1.1.1.2.4.2 rmind Field (OPR3, WordAcc, NoLock, Preserve)
57 1.1.1.2.4.2 rmind {
58 1.1.1.2.4.2 rmind FLD3, 8
59 1.1.1.2.4.2 rmind }
60 1.1.1.2.4.2 rmind
61 1.1.1.2.4.2 rmind // Invalid SyncLevel in method declaration
62 1.1.1.2.4.2 rmind
63 1.1.1.2.4.2 rmind Method (MTH1, 0, NotSerialized, 32)
64 1.1.1.2.4.2 rmind {
65 1.1.1.2.4.2 rmind // Invalid arguments and uninitialized locals
66 1.1.1.2.4.2 rmind
67 1.1.1.2.4.2 rmind Store (Arg3, Local0)
68 1.1.1.2.4.2 rmind Store (Local1, Local2)
69 1.1.1.2.4.2 rmind
70 1.1.1.2.4.2 rmind // Parameter typechecking (MTX1 is invalid type)
71 1.1.1.2.4.2 rmind
72 1.1.1.2.4.2 rmind Subtract (MTX1, 4, Local3)
73 1.1.1.2.4.2 rmind
74 1.1.1.2.4.2 rmind // Various invalid parameters
75 1.1.1.2.4.2 rmind
76 1.1.1.2.4.2 rmind CreateField (BUF1, 0, Subtract (4, 4), FLD1)
77 1.1.1.2.4.2 rmind
78 1.1.1.2.4.2 rmind // Unchecked mutex and event timeouts
79 1.1.1.2.4.2 rmind
80 1.1.1.2.4.2 rmind Acquire (MTX1, 100)
81 1.1.1.2.4.2 rmind Wait (EVT1, 1)
82 1.1.1.2.4.2 rmind
83 1.1.1.2.4.2 rmind // Result from operation is not used - statement has no effect
84 1.1.1.2.4.2 rmind
85 1.1.1.2.4.2 rmind Add (INT1, 8)
86 1.1.1.2.4.2 rmind
87 1.1.1.2.4.2 rmind // Unreachable code
88 1.1.1.2.4.2 rmind
89 1.1.1.2.4.2 rmind Return (0)
90 1.1.1.2.4.2 rmind Store (5, INT1)
91 1.1.1.2.4.2 rmind }
92 1.1.1.2.4.2 rmind
93 1.1.1.2.4.2 rmind Method (MTH2)
94 1.1.1.2.4.2 rmind {
95 1.1.1.2.4.2 rmind // Switch with no Case statements
96 1.1.1.2.4.2 rmind
97 1.1.1.2.4.2 rmind Switch (ToInteger (INT1))
98 1.1.1.2.4.2 rmind {
99 1.1.1.2.4.2 rmind Default
100 1.1.1.2.4.2 rmind {
101 1.1.1.2.4.2 rmind }
102 1.1.1.2.4.2 rmind }
103 1.1.1.2.4.2 rmind
104 1.1.1.2.4.2 rmind if (LEqual (INT1, 0))
105 1.1.1.2.4.2 rmind {
106 1.1.1.2.4.2 rmind Return (INT1)
107 1.1.1.2.4.2 rmind }
108 1.1.1.2.4.2 rmind
109 1.1.1.2.4.2 rmind // Fallthrough exit path does not return a value
110 1.1.1.2.4.2 rmind }
111 1.1.1.2.4.2 rmind
112 1.1.1.2.4.2 rmind Method (MTH3)
113 1.1.1.2.4.2 rmind {
114 1.1.1.2.4.2 rmind // Method MTH2 above does not always return a value
115 1.1.1.2.4.2 rmind
116 1.1.1.2.4.2 rmind Store (MTH2 (), Local0)
117 1.1.1.2.4.2 rmind }
118 1.1.1.2.4.2 rmind
119 1.1.1.2.4.2 rmind // Invalid _HID values
120 1.1.1.2.4.2 rmind
121 1.1.1.2.4.2 rmind Device (H1)
122 1.1.1.2.4.2 rmind {
123 1.1.1.2.4.2 rmind Name (_HID, "*PNP0C0A") // Illegal leading asterisk
124 1.1.1.2.4.2 rmind }
125 1.1.1.2.4.2 rmind Device (H2)
126 1.1.1.2.4.2 rmind {
127 1.1.1.2.4.2 rmind Name (_HID, "PNP") // Too short, must be 7 or 8 chars
128 1.1.1.2.4.2 rmind }
129 1.1.1.2.4.2 rmind Device (H3)
130 1.1.1.2.4.2 rmind {
131 1.1.1.2.4.2 rmind Name (_HID, "MYDEVICE01") // Too long, must be 7 or 8 chars
132 1.1.1.2.4.2 rmind }
133 1.1.1.2.4.2 rmind Device (H4)
134 1.1.1.2.4.2 rmind {
135 1.1.1.2.4.2 rmind Name (_HID, "acpi0001") // non-hex chars must be uppercase
136 1.1.1.2.4.2 rmind }
137 1.1.1.2.4.2 rmind Device (H5)
138 1.1.1.2.4.2 rmind {
139 1.1.1.2.4.2 rmind Name (_HID, "PNP-123") // HID must be alphanumeric
140 1.1.1.2.4.2 rmind }
141 1.1.1.2.4.2 rmind Device (H6)
142 1.1.1.2.4.2 rmind {
143 1.1.1.2.4.2 rmind Name (_HID, "") // Illegal Null HID
144 1.1.1.2.4.2 rmind Name (_CID, "") // Illegal Null CID
145 1.1.1.2.4.2 rmind }
146 1.1.1.2.4.2 rmind
147 1.1.1.2.4.2 rmind // Predefined Name typechecking
148 1.1.1.2.4.2 rmind
149 1.1.1.2.4.2 rmind Name (_PRW, 4)
150 1.1.1.2.4.2 rmind Name (_FDI, Buffer () {0})
151 1.1.1.2.4.2 rmind
152 1.1.1.2.4.2 rmind // Predefined Name argument count validation
153 1.1.1.2.4.2 rmind // and return value validation
154 1.1.1.2.4.2 rmind
155 1.1.1.2.4.2 rmind Method (_OSC, 5)
156 1.1.1.2.4.2 rmind {
157 1.1.1.2.4.2 rmind }
158 1.1.1.2.4.2 rmind
159 1.1.1.2.4.2 rmind // Predefined Names that must be implemented as control methods
160 1.1.1.2.4.2 rmind
161 1.1.1.2.4.2 rmind Name (_L01, 1)
162 1.1.1.2.4.2 rmind Name (_E02, 2)
163 1.1.1.2.4.2 rmind Name (_Q03, 3)
164 1.1.1.2.4.2 rmind Name (_ON, 0)
165 1.1.1.2.4.2 rmind Name (_INI, 1)
166 1.1.1.2.4.2 rmind Name (_PTP, 2)
167 1.1.1.2.4.2 rmind
168 1.1.1.2.4.2 rmind // GPE methods that cause type collision (L vs. E)
169 1.1.1.2.4.2 rmind
170 1.1.1.2.4.2 rmind Scope (\_GPE)
171 1.1.1.2.4.2 rmind {
172 1.1.1.2.4.2 rmind Method (_L1D)
173 1.1.1.2.4.2 rmind {
174 1.1.1.2.4.2 rmind }
175 1.1.1.2.4.2 rmind Method (_E1D)
176 1.1.1.2.4.2 rmind {
177 1.1.1.2.4.2 rmind }
178 1.1.1.2.4.2 rmind }
179 1.1.1.2.4.2 rmind
180 1.1.1.2.4.2 rmind // Predefined names that should not have a return value
181 1.1.1.2.4.2 rmind
182 1.1.1.2.4.2 rmind Method (_FDM, 1)
183 1.1.1.2.4.2 rmind {
184 1.1.1.2.4.2 rmind Return (Buffer(1){0x33})
185 1.1.1.2.4.2 rmind }
186 1.1.1.2.4.2 rmind Method (_Q22)
187 1.1.1.2.4.2 rmind {
188 1.1.1.2.4.2 rmind Return ("Unexpected Return Value")
189 1.1.1.2.4.2 rmind }
190 1.1.1.2.4.2 rmind
191 1.1.1.2.4.2 rmind /*
192 1.1.1.2.4.2 rmind * Resource Descriptor error checking
193 1.1.1.2.4.2 rmind */
194 1.1.1.2.4.2 rmind Name (RSC1, ResourceTemplate ()
195 1.1.1.2.4.2 rmind {
196 1.1.1.2.4.2 rmind // Illegal nested StartDependent macros
197 1.1.1.2.4.2 rmind
198 1.1.1.2.4.2 rmind StartDependentFn (0, 0)
199 1.1.1.2.4.2 rmind {
200 1.1.1.2.4.2 rmind StartDependentFn (0, 0)
201 1.1.1.2.4.2 rmind {
202 1.1.1.2.4.2 rmind }
203 1.1.1.2.4.2 rmind }
204 1.1.1.2.4.2 rmind
205 1.1.1.2.4.2 rmind // Missing EndDependentFn macro
206 1.1.1.2.4.2 rmind })
207 1.1.1.2.4.2 rmind
208 1.1.1.2.4.2 rmind Name (RSC2, ResourceTemplate ()
209 1.1.1.2.4.2 rmind {
210 1.1.1.2.4.2 rmind // AddressMin is larger than AddressMax
211 1.1.1.2.4.2 rmind IO (Decode16,
212 1.1.1.2.4.2 rmind 0x07D0, // Range Minimum
213 1.1.1.2.4.2 rmind 0x03E8, // Range Maximum
214 1.1.1.2.4.2 rmind 0x01, // Alignment
215 1.1.1.2.4.2 rmind 0x20, // Length
216 1.1.1.2.4.2 rmind )
217 1.1.1.2.4.2 rmind
218 1.1.1.2.4.2 rmind // Length larger than Min/Max window size
219 1.1.1.2.4.2 rmind Memory32 (ReadOnly,
220 1.1.1.2.4.2 rmind 0x00001000, // Range Minimum
221 1.1.1.2.4.2 rmind 0x00002000, // Range Maximum
222 1.1.1.2.4.2 rmind 0x00000004, // Alignment
223 1.1.1.2.4.2 rmind 0x00002000, // Length
224 1.1.1.2.4.2 rmind )
225 1.1.1.2.4.2 rmind
226 1.1.1.2.4.2 rmind // Min and Max not multiples of alignment value
227 1.1.1.2.4.2 rmind Memory32 (ReadOnly,
228 1.1.1.2.4.2 rmind 0x00001001, // Range Minimum
229 1.1.1.2.4.2 rmind 0x00002002, // Range Maximum
230 1.1.1.2.4.2 rmind 0x00000004, // Alignment
231 1.1.1.2.4.2 rmind 0x00000200, // Length
232 1.1.1.2.4.2 rmind )
233 1.1.1.2.4.2 rmind
234 1.1.1.2.4.2 rmind // 10-bit ISA I/O address has a max of 0x3FF
235 1.1.1.2.4.2 rmind FixedIO (
236 1.1.1.2.4.2 rmind 0xFFFF, // Address
237 1.1.1.2.4.2 rmind 0x20, // Length
238 1.1.1.2.4.2 rmind )
239 1.1.1.2.4.2 rmind
240 1.1.1.2.4.2 rmind // Invalid AccessSize parameter
241 1.1.1.2.4.2 rmind Register (SystemIO,
242 1.1.1.2.4.2 rmind 0x08, // Bit Width
243 1.1.1.2.4.2 rmind 0x00, // Bit Offset
244 1.1.1.2.4.2 rmind 0x0000000000000100, // Address
245 1.1.1.2.4.2 rmind 0x05 // Access Size
246 1.1.1.2.4.2 rmind )
247 1.1.1.2.4.2 rmind
248 1.1.1.2.4.2 rmind // Invalid ResourceType (0xB0)
249 1.1.1.2.4.2 rmind QWordSpace (0xB0, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
250 1.1.1.2.4.2 rmind 0x0000, // Granularity
251 1.1.1.2.4.2 rmind 0xA000, // Range Minimum
252 1.1.1.2.4.2 rmind 0xBFFF, // Range Maximum
253 1.1.1.2.4.2 rmind 0x0000, // Translation Offset
254 1.1.1.2.4.2 rmind 0x2000, // Length
255 1.1.1.2.4.2 rmind ,, )
256 1.1.1.2.4.2 rmind
257 1.1.1.2.4.2 rmind // AddressMin is larger than AddressMax
258 1.1.1.2.4.2 rmind WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
259 1.1.1.2.4.2 rmind 0x0000, // Granularity
260 1.1.1.2.4.2 rmind 0x0200, // Range Minimum
261 1.1.1.2.4.2 rmind 0x0100, // Range Maximum
262 1.1.1.2.4.2 rmind 0x0000, // Translation Offset
263 1.1.1.2.4.2 rmind 0x0100, // Length
264 1.1.1.2.4.2 rmind ,, , TypeStatic)
265 1.1.1.2.4.2 rmind
266 1.1.1.2.4.2 rmind // Length larger than Min/Max window size
267 1.1.1.2.4.2 rmind DWordSpace (0xC3, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
268 1.1.1.2.4.2 rmind 0x00000000, // Granularity
269 1.1.1.2.4.2 rmind 0x000C8000, // Range Minimum
270 1.1.1.2.4.2 rmind 0x000C9000, // Range Maximum
271 1.1.1.2.4.2 rmind 0x00000000, // Translation Offset
272 1.1.1.2.4.2 rmind 0x00001002, // Length
273 1.1.1.2.4.2 rmind ,, )
274 1.1.1.2.4.2 rmind
275 1.1.1.2.4.2 rmind // Granularity must be (power-of-two -1)
276 1.1.1.2.4.2 rmind DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxNotFixed, NonCacheable, ReadWrite,
277 1.1.1.2.4.2 rmind 0x00000010,
278 1.1.1.2.4.2 rmind 0x40000000,
279 1.1.1.2.4.2 rmind 0xFED9FFFF,
280 1.1.1.2.4.2 rmind 0x00000000,
281 1.1.1.2.4.2 rmind 0xBECA0000)
282 1.1.1.2.4.2 rmind
283 1.1.1.2.4.2 rmind // Address Min (with zero length) not on granularity boundary
284 1.1.1.2.4.2 rmind QWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
285 1.1.1.2.4.2 rmind 0x0000000000000003, // Granularity
286 1.1.1.2.4.2 rmind 0x0000000000000B02, // Range Minimum
287 1.1.1.2.4.2 rmind 0x0000000000000C00, // Range Maximum
288 1.1.1.2.4.2 rmind 0x0000000000000000, // Translation Offset
289 1.1.1.2.4.2 rmind 0x0000000000000000, // Length
290 1.1.1.2.4.2 rmind ,, , TypeStatic)
291 1.1.1.2.4.2 rmind
292 1.1.1.2.4.2 rmind // Address Max (with zero length) not on (granularity boundary -1)
293 1.1.1.2.4.2 rmind QWordMemory (ResourceProducer, PosDecode, MinNotFixed, MaxFixed, Cacheable, ReadWrite,
294 1.1.1.2.4.2 rmind 0x0000000000000001, // Granularity
295 1.1.1.2.4.2 rmind 0x0000000000100000, // Range Minimum
296 1.1.1.2.4.2 rmind 0x00000000002FFFFE, // Range Maximum
297 1.1.1.2.4.2 rmind 0x0000000000000000, // Translation Offset
298 1.1.1.2.4.2 rmind 0x0000000000000000, // Length
299 1.1.1.2.4.2 rmind ,, , AddressRangeMemory, TypeStatic)
300 1.1.1.2.4.2 rmind
301 1.1.1.2.4.2 rmind // Invalid combination: zero length, both Min and Max are fixed
302 1.1.1.2.4.2 rmind DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
303 1.1.1.2.4.2 rmind 0x00000000, // Granularity
304 1.1.1.2.4.2 rmind 0x000C8000, // Range Minimum
305 1.1.1.2.4.2 rmind 0x000C8FFF, // Range Maximum
306 1.1.1.2.4.2 rmind 0x00000000, // Translation Offset
307 1.1.1.2.4.2 rmind 0x00000000, // Length
308 1.1.1.2.4.2 rmind ,, )
309 1.1.1.2.4.2 rmind
310 1.1.1.2.4.2 rmind // Invalid combination: non-zero length, Min Fixed, Max not fixed
311 1.1.1.2.4.2 rmind DWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
312 1.1.1.2.4.2 rmind 0x00000001, // Granularity
313 1.1.1.2.4.2 rmind 0x000C8000, // Range Minimum
314 1.1.1.2.4.2 rmind 0x000C8FFF, // Range Maximum
315 1.1.1.2.4.2 rmind 0x00000000, // Translation Offset
316 1.1.1.2.4.2 rmind 0x00000100, // Length
317 1.1.1.2.4.2 rmind ,, )
318 1.1.1.2.4.2 rmind
319 1.1.1.2.4.2 rmind // Invalid combination: non-zero length, Min not Fixed, Max fixed
320 1.1.1.2.4.2 rmind DWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
321 1.1.1.2.4.2 rmind 0x00000001, // Granularity
322 1.1.1.2.4.2 rmind 0x000C8000, // Range Minimum
323 1.1.1.2.4.2 rmind 0x000C8FFF, // Range Maximum
324 1.1.1.2.4.2 rmind 0x00000000, // Translation Offset
325 1.1.1.2.4.2 rmind 0x00000200, // Length
326 1.1.1.2.4.2 rmind ,, )
327 1.1.1.2.4.2 rmind
328 1.1.1.2.4.2 rmind // Granularity must be zero if non-zero length, min/max fixed
329 1.1.1.2.4.2 rmind DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
330 1.1.1.2.4.2 rmind 0x0000000F, // Granularity
331 1.1.1.2.4.2 rmind 0x000C8000, // Range Minimum
332 1.1.1.2.4.2 rmind 0x000C8FFF, // Range Maximum
333 1.1.1.2.4.2 rmind 0x00000000, // Translation Offset
334 1.1.1.2.4.2 rmind 0x00001000, // Length
335 1.1.1.2.4.2 rmind ,, )
336 1.1.1.2.4.2 rmind
337 1.1.1.2.4.2 rmind // Null descriptor (intended to be modified at runtime) must
338 1.1.1.2.4.2 rmind // have a resource tag (to allow it to be modified at runtime)
339 1.1.1.2.4.2 rmind DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
340 1.1.1.2.4.2 rmind 0x00000000, // Granularity
341 1.1.1.2.4.2 rmind 0x00000000, // Range Minimum
342 1.1.1.2.4.2 rmind 0x00000000, // Range Maximum
343 1.1.1.2.4.2 rmind 0x00000000, // Translation Offset
344 1.1.1.2.4.2 rmind 0x00000000, // Length
345 1.1.1.2.4.2 rmind ,, )
346 1.1.1.2.4.2 rmind
347 1.1.1.2.4.2 rmind // Missing StartDependentFn macro
348 1.1.1.2.4.2 rmind
349 1.1.1.2.4.2 rmind EndDependentFn ()
350 1.1.1.2.4.2 rmind })
351 1.1.1.2.4.2 rmind }
352 1.1.1.2.4.2 rmind
353