mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-12-28 16:30:59 +00:00
91d33b586d
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.
94 lines
3.3 KiB
C++
94 lines
3.3 KiB
C++
/*****************************************************************************/
|
|
/* */
|
|
/* Special Conformance Test 4.3.0.1: Ensure static variables and functions */
|
|
/* are not passed to the linker, and that */
|
|
/* extern variables and functions are */
|
|
/* passed to the linker */
|
|
/* */
|
|
/* Other files needed: spc4301.h - header file for separate compilation */
|
|
/* spc4301.1.cc - separately compiled file */
|
|
/* spc4301.2.cc - separately compiled file */
|
|
/* spc4301.exec - controls compilation and linking */
|
|
/* {workDisk}/spc4301.symt - linker's global symbol */
|
|
/* table for spc4.3.0.1.cc */
|
|
/* */
|
|
/* Special instructions: Use the EXEC file spc4301.exec to separately */
|
|
/* compile and link the three files. A symbol table */
|
|
/* is produced in the output file {workDisk}/ */
|
|
/* spc4301.symt. The tester should use the linker's */
|
|
/* symbol table to verify that only the extern */
|
|
/* functions and variables are in the global symbol */
|
|
/* table. In addition, the EXEC file will try to */
|
|
/* execute the program. If all is well, a Pass/Fail */
|
|
/* message will be written to standard out. */
|
|
/* */
|
|
/* The global functions are: ChangeChar, L0 */
|
|
/* The global variables are: real, i, longNum */
|
|
/* */
|
|
/*****************************************************************************/
|
|
|
|
#include <math.h>
|
|
#include <string.h>
|
|
#include "spc4301.h"
|
|
|
|
int printf(const char *, ...);
|
|
|
|
int main (void)
|
|
{
|
|
int count = 0;
|
|
|
|
static extended E1 (double x, float y);
|
|
static char ch;
|
|
char *chPtr;
|
|
|
|
extern int i;
|
|
extern long L0 (int *j);
|
|
|
|
count++;
|
|
i = 0;
|
|
while (chArray [i] != '\0')
|
|
{
|
|
ChangeChar (&chArray [i]);
|
|
++i;
|
|
}
|
|
chPtr = chArray;
|
|
if ((strcmp (chPtr, "bcde")) != 0)
|
|
goto Fail;
|
|
|
|
count++;
|
|
real = E1 (2.1, 1.5);
|
|
if ( (fabs (real - 3.15)) > 0.1 )
|
|
goto Fail;
|
|
|
|
count++;
|
|
ch = F1 (2.3, 'a');
|
|
if (ch != 'c')
|
|
goto Fail;
|
|
|
|
count++;
|
|
longNum = L0 ((int *) chArray);
|
|
if (longNum != 25442)
|
|
goto Fail;
|
|
|
|
printf ("Passed Special Conformance Test spc4.3.0.1\n");
|
|
return 0;
|
|
|
|
Fail:
|
|
printf ("Failed Special Conformance Test spc4.3.0.1: count = %d\n", count);
|
|
return 0;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
static extended E1 (double x, float y)
|
|
{
|
|
return (x * y);
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
static int F1 (float a, char ch)
|
|
{
|
|
return ((long) a) + ((long) ch);
|
|
}
|