ORCA-C/Tests/Conformance/C25.0.25.CC
Stephen Heumann 91d33b586d Fix various C99+ conformance issues and bugs in test cases.
The main changes made to most tests are:

*Declarations always include explicit types, not relying on implicit int. The declaration of main in most test programs is changed to be "int main (void) {...}", adding an explicit return type and a prototype. (There are still some non-prototyped functions, though.)

*Functions are always declared before use, either by including a header or by providing a declaration for the specific function. The latter approach is usually used for printf, to avoid requiring ORCA/C to process stdio.h when compiling every test case (which might make test runs noticeably slower).

*Make all return statements in non-void functions (e.g. main) return a value.

*Avoid some instances of undefined behavior and type errors in printf and scanf calls.

Several miscellaneous bugs are also fixed.

There are still a couple test cases that intentionally rely on the C89 behavior, to ensure it still works.
2022-10-17 20:17:24 -05:00

179 lines
4.8 KiB
C++

/* Conformance Test 25.0.25: Verification of code generation for upper and */
/* lower limits of all addressing modes */
#define DP 0x02 /* define 1, 2, & 3 byte addresses */
#define ABS 0x800
#define LONG 0x123456
#include <stdio.h>
int main (void)
{
int i = 0;
asm
{
brl Test
Code: ADC 0x0
ADC 0xFF
LDA 0x0,X
LDA 0xFF,X
LDX 0x0,Y
LDX 0xFF,Y
ROR |0x0000
ROR 0xFFFF
ROL |0x0000,X
ROL 0xFFFF,X
STA |0x0000,Y
STA 0xFFFF,Y
JMP (|0x0000)
JMP (0xFFFF)
ORA (0x0),Y
ORA (0xFF),Y
CMP (0x0,X)
CMP (0xFF,X)
BEQ LBL4
LBL4: BEQ LBL4
AND (0x0)
AND (0xFF)
JMP (|0x0000,X)
JMP (0xFFFF,X)
SBC 0x0,S
SBC 0xFF,S
ADC (0x0,S),Y
ADC (0xFF,S),Y
AND >0x000000
AND 0xFFFFFF
CMP >0x000000,X
CMP 0xFFFFFF,X
EOR [0x0]
EOR [0xFF]
LDA [0x0],Y
LDA [0xFF],Y
JMP [|0x0]
JMP [0xFFFF]
BRL LBL5
LBL5: BRL LBL5
Data: dcb 0x65
dcb 0x00
dcb 0x65
dcb 0xFF
dcb 0xB5
dcb 0x00
dcb 0xB5
dcb 0xFF
dcb 0xB6
dcb 0x00
dcb 0xB6
dcb 0xFF
dcb 0x6E
dcb 0x00
dcb 0x00
dcb 0x6E
dcb 0xFF
dcb 0xFF
dcb 0x3E
dcb 0x00
dcb 0x00
dcb 0x3E
dcb 0xFF
dcb 0xFF
dcb 0x99
dcb 0x00
dcb 0x00
dcb 0x99
dcb 0xFF
dcb 0xFF
dcb 0x6C
dcb 0x00
dcb 0x00
dcb 0x6C
dcb 0xFF
dcb 0xFF
dcb 0x11
dcb 0x00
dcb 0x11
dcb 0xFF
dcb 0xC1
dcb 0x00
dcb 0xC1
dcb 0xFF
dcb 0xF0
dcb 0x00
dcb 0xF0
dcb 0xFE
dcb 0x32
dcb 0x00
dcb 0x32
dcb 0xFF
dcb 0x7C
dcb 0x00
dcb 0x00
dcb 0x7C
dcb 0xFF
dcb 0xFF
dcb 0xE3
dcb 0x00
dcb 0xE3
dcb 0xFF
dcb 0x73
dcb 0x00
dcb 0x73
dcb 0xFF
dcb 0x2F
dcb 0x00
dcb 0x00
dcb 0x00
dcb 0x2F
dcb 0xFF
dcb 0xFF
dcb 0xFF
dcb 0xDF
dcb 0x00
dcb 0x00
dcb 0x00
dcb 0xDF
dcb 0xFF
dcb 0xFF
dcb 0xFF
dcb 0x47
dcb 0x00
dcb 0x47
dcb 0xFF
dcb 0xB7
dcb 0x00
dcb 0xB7
dcb 0xFF
dcb 0xDC
dcb 0x00
dcb 0x00
dcb 0xDC
dcb 0xFF
dcb 0xFF
dcb 0x82
dcb 0x00
dcb 0x00
dcb 0x82
dcb 0xFD
dcb 0xFF
Test: ldx #100
Lbl1: lda Code,X
cmp Data,X
bne Err1
dex
dex
bpl Lbl1
bra Out
Err1: inc i
Out: nop
}
if (i)
goto Fail;
printf ("Passed Conformance Test 25.0.25\n");
return 0;
Fail:
printf ("Failed Conformance Test 25.0.25\n");
}