ORCA-C/Tests/Conformance/C3.5.2.4.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

44 lines
1.0 KiB
C++

/* Conformance Test 3.5.2.4: Verification of nested #elif commands, using */
/* macro substitution */
int printf(const char *, ...);
#define PASS "Passed Conformance Test 3.5.2.4\n"
#define FAIL "Failed Conformance Test 3.5.2.4\n"
#define CALL1(a,b,c) ((a) - (b) * (c))
#define CALL2(x,y) ((x) || (y))
int main (void)
{
#if CALL1 (6,2,3)
#if CALL1 (8,2,4)
#if CALL2 (0,0)
printf (FAIL);
#elif 0
printf (FAIL);
#elif 32767
printf (FAIL);
#endif
#elif CALL1 (10,3,4)
printf (FAIL);
#elif CALL2 (7,0)
printf (FAIL);
#else
printf (FAIL);
#endif
#elif CALL1 (12,4,3)
printf (FAIL);
#elif CALL2 ((5-(4+1)), 0)
printf (FAIL);
#elif CALL1 (16,4,4)
printf (FAIL);
#elif 0
printf (FAIL);
#elif CALL1 (20,-10,-2)
printf (FAIL);
#else
printf (PASS);
#endif
}