mirror of
https://github.com/dlang/dmd.git
synced 2025-04-27 13:40:11 +03:00
254 lines
4.1 KiB
C++
254 lines
4.1 KiB
C++
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct Foo1 { char c; };
|
|
|
|
struct Foo1 ctest1()
|
|
{
|
|
struct Foo1 f;
|
|
|
|
f.c = 3;
|
|
return f;
|
|
}
|
|
|
|
struct Foo2 { short s; };
|
|
|
|
struct Foo2 ctest2()
|
|
{
|
|
struct Foo2 f;
|
|
|
|
f.s = 0x1234;
|
|
return f;
|
|
}
|
|
|
|
struct Foo3 { char c; short s; };
|
|
|
|
struct Foo3 ctest3()
|
|
{
|
|
struct Foo3 f;
|
|
|
|
f.s = 0x5678;
|
|
return f;
|
|
}
|
|
|
|
|
|
struct Foo4 { int i; };
|
|
|
|
struct Foo4 ctest4()
|
|
{
|
|
struct Foo4 f;
|
|
|
|
f.i = 0x12345678;
|
|
return f;
|
|
}
|
|
|
|
struct Foo5 { int i, j; };
|
|
|
|
struct Foo5 ctest5()
|
|
{
|
|
struct Foo5 f;
|
|
|
|
f.i = 0x12345678;
|
|
f.j = 0x21436587;
|
|
return f;
|
|
}
|
|
|
|
|
|
struct Foo6 { int i, j, k; };
|
|
|
|
struct Foo6 ctest6()
|
|
{
|
|
struct Foo6 f;
|
|
|
|
f.i = 0x12345678;
|
|
f.j = 0x21463587;
|
|
f.k = 0x24163857;
|
|
return f;
|
|
}
|
|
|
|
struct S7 { float a,b; };
|
|
|
|
struct S7 ctest10()
|
|
{
|
|
struct S7 f;
|
|
|
|
f.a = 2.5;
|
|
f.b = 1.5;
|
|
return f;
|
|
}
|
|
|
|
// =================================
|
|
|
|
char ctest7(char c)
|
|
{
|
|
return c + 1;
|
|
}
|
|
|
|
unsigned char ctest8(unsigned char c)
|
|
{
|
|
return c + 1;
|
|
}
|
|
|
|
signed char ctest9(signed char c)
|
|
{
|
|
return c + 1;
|
|
}
|
|
|
|
/***********************************************/
|
|
|
|
void ctestrir(int x1, int x2, int x3, int x4, int x5, int x6, long double a, int b, long double c)
|
|
{
|
|
assert(a == 100.0);
|
|
assert(b == 67);
|
|
assert(c == 200.0);
|
|
}
|
|
|
|
/***********************************************/
|
|
|
|
extern void dtestrir(int x1, int x2, int x3, int x4, int x5, int x6, long double a, int b, long double c);
|
|
|
|
void test4()
|
|
{
|
|
dtestrir(1,2,3,4,5,6, 300.0, 68, 401.0);
|
|
}
|
|
|
|
/**********************************************/
|
|
|
|
typedef struct S11 {
|
|
char a;
|
|
char b;
|
|
char c;
|
|
} S11;
|
|
|
|
S11 ctest11(char x, S11 s, char y) {
|
|
printf("C sz = %d\n", (int)sizeof(S11));
|
|
assert(sizeof(S11) == 3);
|
|
printf("x = %d\n", (int)x);
|
|
printf("s.a = %d\n", (int)s.a);
|
|
printf("s.b = %d\n", (int)s.b);
|
|
printf("s.c = %d\n", (int)s.c);
|
|
printf("y = %d\n", (int)y);
|
|
return s;
|
|
}
|
|
|
|
/**********************************************/
|
|
|
|
typedef struct S12 {
|
|
char a,d;
|
|
char b,e;
|
|
char c;
|
|
} S12;
|
|
|
|
S12 ctest12(char x, S12 s, char y) {
|
|
printf("C sz = %d\n", (int)sizeof(S12));
|
|
assert(sizeof(S12) == 5);
|
|
printf("x = %d\n", (int)x);
|
|
printf("s.a = %d\n", (int)s.a);
|
|
printf("s.b = %d\n", (int)s.b);
|
|
printf("s.c = %d\n", (int)s.c);
|
|
printf("y = %d\n", (int)y);
|
|
return s;
|
|
}
|
|
|
|
|
|
/**********************************************/
|
|
|
|
typedef struct S13 {
|
|
short a;
|
|
short b;
|
|
short c;
|
|
} S13;
|
|
|
|
S13 ctest13(char x, S13 s, char y) {
|
|
printf("C sz = %d\n", (int)sizeof(S13));
|
|
assert(sizeof(S13) == 6);
|
|
printf("x = %d\n", (int)x);
|
|
printf("s.a = %d\n", (int)s.a);
|
|
printf("s.b = %d\n", (int)s.b);
|
|
printf("s.c = %d\n", (int)s.c);
|
|
printf("y = %d\n", (int)y);
|
|
return s;
|
|
}
|
|
|
|
|
|
/**********************************************/
|
|
|
|
typedef struct S14 {
|
|
char a,d,e,f;
|
|
char b,g;
|
|
char c;
|
|
} S14;
|
|
|
|
S14 ctest14(char x, S14 s, char y) {
|
|
printf("C sz = %d\n", (int)sizeof(S14));
|
|
assert(sizeof(S14) == 7);
|
|
printf("x = %d\n", (int)x);
|
|
printf("s.a = %d\n", (int)s.a);
|
|
printf("s.b = %d\n", (int)s.b);
|
|
printf("s.c = %d\n", (int)s.c);
|
|
printf("y = %d\n", (int)y);
|
|
return s;
|
|
}
|
|
|
|
|
|
/**********************************************/
|
|
|
|
typedef struct S15 {
|
|
char a,d,e,f;
|
|
char b,g,h,i;
|
|
char c;
|
|
} S15;
|
|
|
|
S15 ctest15(char x, S15 s, char y) {
|
|
printf("C sz = %d\n", (int)sizeof(S15));
|
|
assert(sizeof(S15) == 9);
|
|
printf("x = %d\n", (int)x);
|
|
printf("s.a = %d\n", (int)s.a);
|
|
printf("s.b = %d\n", (int)s.b);
|
|
printf("s.c = %d\n", (int)s.c);
|
|
printf("y = %d\n", (int)y);
|
|
return s;
|
|
}
|
|
|
|
|
|
/**********************************************/
|
|
|
|
typedef struct S16 {
|
|
char a[5];
|
|
#ifdef __GNUC__
|
|
struct __attribute__((packed))
|
|
#else
|
|
#pragma pack(push, 1)
|
|
struct
|
|
#endif
|
|
{
|
|
char b;
|
|
int c;
|
|
};
|
|
#ifndef __GNUC__
|
|
#pragma pack(pop)
|
|
#endif
|
|
} S16;
|
|
|
|
S16 ctest16(char x, S16 s, char y) {
|
|
printf("C sz = %d\n", (int)sizeof(S16));
|
|
assert(sizeof(S16) == 10);
|
|
printf("x = %d\n", (int)x);
|
|
printf("s.a = %.*s\n", 5, s.a);
|
|
printf("s.b = %d\n", (int)s.b);
|
|
printf("s.c = %d\n", s.c);
|
|
printf("y = %d\n", (int)y);
|
|
return s;
|
|
}
|
|
|
|
|
|
|
|
#if __cplusplus
|
|
}
|
|
#endif
|