Merge pull request #473 from ISSOtm/shift_ub

Remove undefined behavior from shifts
This commit is contained in:
Eldred Habert
2020-02-03 03:49:38 +01:00
committed by GitHub
10 changed files with 244 additions and 37 deletions

View File

@@ -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
View 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
View 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
View 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

Binary file not shown.