/* $Id: 631main.c 672 2003-09-09 13:47:42Z bird $ * * Testcase #631 - return structs from _System and _Optlink. * * InnoTek Systemberatung GmbH confidential * * Copyright (c) 2003 InnoTek Systemberatung GmbH * Author: knut st. osmundsen * * All Rights Reserved * */ /******************************************************************************* * Structures and Typedefs * *******************************************************************************/ struct ret4bytes { unsigned int au[1]; }; struct ret8bytes { unsigned int au[2]; }; struct ret12bytes { unsigned int au[3]; }; struct ret16bytes { unsigned int au[4]; }; /******************************************************************************* * External Functions * *******************************************************************************/ extern struct ret4bytes _System asmfoo4(void); extern struct ret8bytes _System asmfoo8(void); extern struct ret12bytes _System asmfoo12(void); extern struct ret16bytes _System asmfoo16(void); struct ret4bytes _System foo4(void) { struct ret4bytes ret = {1}; return ret; } struct ret8bytes _System foo8(void) { struct ret8bytes ret = {1,2}; return ret; } struct ret12bytes _System foo12(void) { struct ret12bytes ret = {1,2,3}; return ret; } struct ret16bytes _System foo16(void) { struct ret16bytes ret = {1,2,3,4}; return ret; } int main(void) { int rcRet = 0; struct ret4bytes rc4; struct ret8bytes rc8; struct ret12bytes rc12; struct ret16bytes rc16; /* gcc */ memset(&rc4, 0, sizeof(rc4)); rc4 = foo4(); if (rc4.au[0] != 1) { printf("631main: foo4 failed\n"); rcRet++; } memset(&rc8, 0, sizeof(rc8)); rc8 = foo8(); if (rc8.au[0] != 1 && rc8.au[1] != 2) { printf("631main: foo8 failed\n"); rcRet++; } memset(&rc12, 0, sizeof(rc12)); rc12 = foo12(); if (rc12.au[0] != 1 && rc12.au[1] != 2 && rc16.au[2] != 3) { printf("631main: foo12 failed\n"); rcRet++; } memset(&rc16, 0, sizeof(rc16)); rc16 = foo16(); if (rc16.au[0] != 1 && rc16.au[1] != 2 && rc16.au[2] != 3 && rc16.au[3] != 4) { printf("631main: foo12 failed\n"); rcRet++; } /* asm */ memset(&rc4, 0, sizeof(rc4)); rc4 = asmfoo4(); if (rc4.au[0] != 1) { printf("631main: asmfoo4 failed\n"); rcRet++; } memset(&rc8, 0, sizeof(rc8)); rc8 = asmfoo8(); if (rc8.au[0] != 1 && rc8.au[1] != 2) { printf("631main: asmfoo8 failed\n"); rcRet++; } memset(&rc12, 0, sizeof(rc12)); rc12 = asmfoo12(); if (rc12.au[0] != 1 && rc12.au[1] != 2 && rc16.au[2] != 3) { printf("631main: asmfoo12 failed\n"); rcRet++; } memset(&rc16, 0, sizeof(rc16)); rc16 = asmfoo16(); if (rc16.au[0] != 1 && rc16.au[1] != 2 && rc16.au[2] != 3 && rc16.au[3] != 4) { printf("631main: asmfoo12 failed\n"); rcRet++; } if (!rcRet) printf("Successfully executed return struct testcase (#631).\n"); else printf("631main: %d failures.\n", rcRet); return rcRet; }