aboutsummaryrefslogtreecommitdiff
path: root/tests/misc/badcode.asl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/misc/badcode.asl')
-rw-r--r--tests/misc/badcode.asl295
1 files changed, 295 insertions, 0 deletions
diff --git a/tests/misc/badcode.asl b/tests/misc/badcode.asl
new file mode 100644
index 000000000000..36ca0d582f27
--- /dev/null
+++ b/tests/misc/badcode.asl
@@ -0,0 +1,295 @@
+/*
+ * badcode.asl
+ *
+ * This file contains examples of the extended error checking and
+ * typechecking capabilities of the iASL compiler. Other ASL compilers
+ * may ignore these errors completely. Note - this is not an exhaustive
+ * list of errors detected by iASL, it shows many of the errors that
+ * are not detected by other ASL compilers.
+ *
+ * To compile, use:
+ * iasl badcode.asl
+ */
+DefinitionBlock ("badcode.aml", "DSDT", 1, "Intel", "Example", 0x00000001)
+{
+ Name (INT1, 0)
+ Name (BUF1, Buffer() {0,1,2,3})
+ Event (EVT1)
+
+ // Invalid SyncLevel in Mutex declaration
+
+ Mutex (MTX1, 32)
+
+ // Integer beyond the table integer size (32 bits)
+
+ Name (BIG, 0x1234567887654321)
+
+ // CPackage length does not match initializer list length
+
+ Name (PKG1, Package(5) {0,1})
+
+ // Inadvertent use of single backslash in a string
+
+ Name (PATH, Buffer() {"\_SB_.PCI2._CRS"})
+
+ // Invalid hex escape sequence
+
+ Name (ESC1, "abcdefg\x00hijklmn")
+
+ // Field access beyond region bounds
+
+ OperationRegion (OPR1, SystemMemory, 0x2000, 6)
+ Field (OPR1, DWordAcc, NoLock, Preserve)
+ {
+ Offset (4),
+ FLD1, 8
+ }
+
+ // Some address spaces support only ByteAcc or BufferAcc
+
+ OperationRegion (OPR2, EmbeddedControl, 0x4000, 8)
+ Field (OPR2, DWordAcc, NoLock, Preserve)
+ {
+ FLD2, 8
+ }
+ OperationRegion (OPR3, SMBus, 0x8000, 16)
+ Field (OPR3, WordAcc, NoLock, Preserve)
+ {
+ FLD3, 8
+ }
+
+ // Invalid SyncLevel in method declaration
+
+ Method (MTH1, 0, NotSerialized, 32)
+ {
+ // Invalid arguments and uninitialized locals
+
+ Store (Arg3, Local0)
+ Store (Local1, Local2)
+
+ // Parameter typechecking (MTX1 is invalid type)
+
+ Subtract (MTX1, 4, Local3)
+
+ // Various invalid parameters
+
+ CreateField (BUF1, 0, Subtract (4, 4), FLD1)
+
+ // Unchecked mutex and event timeouts
+
+ Acquire (MTX1, 100)
+ Wait (EVT1, 1)
+
+ // Result from operation is not used - statement has no effect
+
+ Add (INT1, 8)
+
+ // Unreachable code
+
+ Return (0)
+ Store (5, INT1)
+ }
+
+ Method (MTH2)
+ {
+ // Switch with no Case statements
+
+ Switch (ToInteger (INT1))
+ {
+ Default
+ {
+ }
+ }
+
+ if (LEqual (INT1, 0))
+ {
+ Return (INT1)
+ }
+
+ // Fallthrough exit path does not return a value
+ }
+
+ Method (MTH3)
+ {
+ // Method MTH2 above does not always return a value
+
+ Store (MTH2 (), Local0)
+ }
+
+ // Invalid _HID value
+
+ Name (_HID, "*PNP0C0A")
+
+ // Predefined Name typechecking
+
+ Name (_PRW, 4)
+ Name (_FDI, Buffer () {0})
+
+ // Predefined Name argument count validation
+ // and return value validation
+
+ Method (_OSC, 5)
+ {
+ }
+
+ // Predefined Names that must be implemented as control methods
+
+ Name (_L01, 1)
+ Name (_E02, 2)
+ Name (_Q03, 3)
+ Name (_ON, 0)
+ Name (_INI, 1)
+ Name (_PTP, 2)
+
+ /*
+ * Resource Descriptor error checking
+ */
+ Name (RSC1, ResourceTemplate ()
+ {
+ // Illegal nested StartDependent macros
+
+ StartDependentFn (0, 0)
+ {
+ StartDependentFn (0, 0)
+ {
+ }
+ }
+
+ // Missing EndDependentFn macro
+ })
+
+ Name (RSC2, ResourceTemplate ()
+ {
+ // AddressMin is larger than AddressMax
+ IO (Decode16,
+ 0x07D0, // Range Minimum
+ 0x03E8, // Range Maximum
+ 0x01, // Alignment
+ 0x20, // Length
+ )
+
+ // Length larger than Min/Max window size
+ Memory32 (ReadOnly,
+ 0x00001000, // Range Minimum
+ 0x00002000, // Range Maximum
+ 0x00000004, // Alignment
+ 0x00002000, // Length
+ )
+
+ // Min and Max not multiples of alignment value
+ Memory32 (ReadOnly,
+ 0x00001001, // Range Minimum
+ 0x00002002, // Range Maximum
+ 0x00000004, // Alignment
+ 0x00000200, // Length
+ )
+
+ // 10-bit ISA I/O address has a max of 0x3FF
+ FixedIO (
+ 0xFFFF, // Address
+ 0x20, // Length
+ )
+
+ // Invalid AccessSize parameter
+ Register (SystemIO,
+ 0x08, // Bit Width
+ 0x00, // Bit Offset
+ 0x0000000000000100, // Address
+ 0x05 // Access Size
+ )
+
+ // Invalid ResourceType (0xB0)
+ QWordSpace (0xB0, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
+ 0x0000, // Granularity
+ 0xA000, // Range Minimum
+ 0xBFFF, // Range Maximum
+ 0x0000, // Translation Offset
+ 0x2000, // Length
+ ,, )
+
+ // AddressMin is larger than AddressMax
+ WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
+ 0x0000, // Granularity
+ 0x0200, // Range Minimum
+ 0x0100, // Range Maximum
+ 0x0000, // Translation Offset
+ 0x0100, // Length
+ ,, , TypeStatic)
+
+ // Length larger than Min/Max window size
+ DWordSpace (0xC3, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
+ 0x00000000, // Granularity
+ 0x000C8000, // Range Minimum
+ 0x000C9000, // Range Maximum
+ 0x00000000, // Translation Offset
+ 0x00001002, // Length
+ ,, )
+
+ // Granularity must be (power-of-two -1)
+ DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxNotFixed, NonCacheable, ReadWrite,
+ 0x00000010,
+ 0x40000000,
+ 0xFED9FFFF,
+ 0x00000000,
+ 0xBECA0000)
+
+ // Address Min (with zero length) not on granularity boundary
+ QWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
+ 0x0000000000000003, // Granularity
+ 0x0000000000000B02, // Range Minimum
+ 0x0000000000000C00, // Range Maximum
+ 0x0000000000000000, // Translation Offset
+ 0x0000000000000000, // Length
+ ,, , TypeStatic)
+
+ // Address Max (with zero length) not on (granularity boundary -1)
+ QWordMemory (ResourceProducer, PosDecode, MinNotFixed, MaxFixed, Cacheable, ReadWrite,
+ 0x0000000000000001, // Granularity
+ 0x0000000000100000, // Range Minimum
+ 0x00000000002FFFFE, // Range Maximum
+ 0x0000000000000000, // Translation Offset
+ 0x0000000000000000, // Length
+ ,, , AddressRangeMemory, TypeStatic)
+
+ // Invalid combination: zero length, both Min and Max are fixed
+ DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
+ 0x00000000, // Granularity
+ 0x000C8000, // Range Minimum
+ 0x000C8FFF, // Range Maximum
+ 0x00000000, // Translation Offset
+ 0x00000000, // Length
+ ,, )
+
+ // Invalid combination: non-zero length, Min Fixed, Max not fixed
+ DWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
+ 0x00000001, // Granularity
+ 0x000C8000, // Range Minimum
+ 0x000C8FFF, // Range Maximum
+ 0x00000000, // Translation Offset
+ 0x00000100, // Length
+ ,, )
+
+ // Invalid combination: non-zero length, Min not Fixed, Max fixed
+ DWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
+ 0x00000001, // Granularity
+ 0x000C8000, // Range Minimum
+ 0x000C8FFF, // Range Maximum
+ 0x00000000, // Translation Offset
+ 0x00000200, // Length
+ ,, )
+
+ // Granularity must be zero if non-zero length, min/max fixed
+ DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
+ 0x0000000F, // Granularity
+ 0x000C8000, // Range Minimum
+ 0x000C8FFF, // Range Maximum
+ 0x00000000, // Translation Offset
+ 0x00001000, // Length
+ ,, )
+
+ // Missing StartDependentFn macro
+
+ EndDependentFn ()
+ })
+}
+