mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-25 12:32:07 +00:00
Merge pull request #473 from ISSOtm/shift_ub
Remove undefined behavior from shifts
This commit is contained in:
@@ -2,10 +2,8 @@ warning: overflow.asm(24): [-Wdiv]
|
||||
Division of min value by -1
|
||||
warning: overflow.asm(25): [-Wdiv]
|
||||
Division of min value by -1
|
||||
warning: overflow.asm(34): [-Wshift]
|
||||
Left shift of negative value: -1
|
||||
warning: overflow.asm(35): [-Wshift]
|
||||
Left shift of negative value: -1
|
||||
Shifting negative value -1
|
||||
warning: overflow.asm(39): [-Wlarge-constant]
|
||||
Integer constant '4294967296' is too large
|
||||
warning: overflow.asm(42): [-Wlarge-constant]
|
||||
|
||||
27
test/asm/shift.asm
Normal file
27
test/asm/shift.asm
Normal file
@@ -0,0 +1,27 @@
|
||||
test: macro
|
||||
; Test the rpn system, as well as the linker...
|
||||
dl \1 + zero
|
||||
|
||||
; ...as well as the constexpr system
|
||||
result\@ equ \1
|
||||
printt "\1 = {result\@}\n"
|
||||
endm
|
||||
|
||||
section "test", ROM0[0]
|
||||
|
||||
test 1 << 1
|
||||
test 1 << 32
|
||||
test 1 << 9001
|
||||
test -1 << 1
|
||||
test -1 << 32
|
||||
test -1 << -9001
|
||||
|
||||
test -1 >> 1
|
||||
test -1 >> 32
|
||||
test -1 >> 9001
|
||||
test -4 >> 1
|
||||
test -4 >> 2
|
||||
test -1 >> -9001
|
||||
|
||||
SECTION "Zero", ROM0[0]
|
||||
zero:
|
||||
66
test/asm/shift.err
Normal file
66
test/asm/shift.err
Normal file
@@ -0,0 +1,66 @@
|
||||
warning: shift.asm(13) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting left by large amount 32
|
||||
warning: shift.asm(13) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting left by large amount 32
|
||||
warning: shift.asm(14) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting left by large amount 9001
|
||||
warning: shift.asm(14) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting left by large amount 9001
|
||||
warning: shift.asm(15) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(16) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(16) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting left by large amount 32
|
||||
warning: shift.asm(16) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting left by large amount 32
|
||||
warning: shift.asm(17) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting left by negative value: -9001
|
||||
warning: shift.asm(17) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(17) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting right by large amount 9001
|
||||
warning: shift.asm(17) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting left by negative amount -9001
|
||||
warning: shift.asm(17) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting right by large amount 9001
|
||||
warning: shift.asm(19) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(19) -> shift.asm::test(6): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(20) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(20) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting right by large amount 32
|
||||
warning: shift.asm(20) -> shift.asm::test(6): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(20) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting right by large amount 32
|
||||
warning: shift.asm(21) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(21) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting right by large amount 9001
|
||||
warning: shift.asm(21) -> shift.asm::test(6): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(21) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting right by large amount 9001
|
||||
warning: shift.asm(22) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -4
|
||||
warning: shift.asm(22) -> shift.asm::test(6): [-Wshift]
|
||||
Shifting negative value -4
|
||||
warning: shift.asm(23) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -4
|
||||
warning: shift.asm(23) -> shift.asm::test(6): [-Wshift]
|
||||
Shifting negative value -4
|
||||
warning: shift.asm(24) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting right by negative value: -9001
|
||||
warning: shift.asm(24) -> shift.asm::test(3): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(24) -> shift.asm::test(3): [-Wshift-amount]
|
||||
Shifting left by large amount 9001
|
||||
warning: shift.asm(24) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting right by negative amount -9001
|
||||
warning: shift.asm(24) -> shift.asm::test(6): [-Wshift]
|
||||
Shifting negative value -1
|
||||
warning: shift.asm(24) -> shift.asm::test(6): [-Wshift-amount]
|
||||
Shifting left by large amount 9001
|
||||
12
test/asm/shift.out
Normal file
12
test/asm/shift.out
Normal file
@@ -0,0 +1,12 @@
|
||||
1 << 1 = $2
|
||||
1 << 32 = $0
|
||||
1 << 9001 = $0
|
||||
-1 << 1 = $FFFFFFFE
|
||||
-1 << 32 = $0
|
||||
-1 << -9001 = $FFFFFFFF
|
||||
-1 >> 1 = $FFFFFFFF
|
||||
-1 >> 32 = $FFFFFFFF
|
||||
-1 >> 9001 = $FFFFFFFF
|
||||
-4 >> 1 = $FFFFFFFE
|
||||
-4 >> 2 = $FFFFFFFF
|
||||
-1 >> -9001 = $0
|
||||
BIN
test/asm/shift.out.bin
Normal file
BIN
test/asm/shift.out.bin
Normal file
Binary file not shown.
Reference in New Issue
Block a user