ORCA-C/Tests/Conformance/C4.6.4.3.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

69 lines
1.7 KiB
C++

/* Conformance Test 4.6.4.2: Verify that subscripts work */
/* properly in initializers. */
#include <stdio.h>
#include <string.h>
char str1[] = "Hello, ";
char str2[] = "*world.";
char *str[] = {&str1[0], &str2[1]};
int tensor[3][3][3] = {0,1,2,3,4,5,6,7,8,
9,10,11,12,13,14,15,16,17,
18,19,20,21,22,23,24,25,26};
int *ip[27] = {
&tensor[0][0][0],
&tensor[0][0][1],
&tensor[0][0][2],
&tensor[0][1][0],
&tensor[0][1][1],
&tensor[0][1][2],
&tensor[0][2][0],
&tensor[0][2][1],
&tensor[0][2][2],
&tensor[1][0][0],
&tensor[1][0][1],
&tensor[1][0][2],
&tensor[1][1][0],
&tensor[1][1][1],
&tensor[1][1][2],
&tensor[1][2][0],
&tensor[1][2][1],
&tensor[1][2][2],
&tensor[2][0][0],
&tensor[2][0][1],
&tensor[2][0][2],
&tensor[2][1][0],
&tensor[2][1][1],
&tensor[2][1][2],
&tensor[2][2][0],
&tensor[2][2][1],
&tensor[2][2][2]
};
int main(void)
{
int i;
char st1[20],st2[20];
int fail = 0;
strcpy(st1, str[0]);
strcat(st1, str[1]);
strcpy(st2, &str1[0]);
strcat(st2, &str2[1]);
if (strcmp(st1,st2) != 0)
fail = 1;
for (i = 0; i < 27; ++i)
if (*ip[i] != i)
fail = 1;
if (fail)
printf ("Failed Conformance Test 4.6.4.3\n");
else
printf ("Passed Conformance Test 4.6.4.3\n");
}