test_passing_unions.c
来自「用于进行gcc测试」· C语言 代码 · 共 145 行
C
145 行
/* This tests passing of structs. Only integers are tested. */#include "defines.h"#include "args.h"struct IntegerRegisters iregs;struct FloatRegisters fregs;unsigned int num_iregs, num_fregs;struct int_struct{ int i;};struct long_struct{ long l;};union un1{ char c; int i;};union un2{ char c1; long l; char c2;};union un3{ struct int_struct is; struct long_struct ls; union un1 un;};voidcheck_union_passing1(union un1 u ATTRIBUTE_UNUSED){ check_int_arguments;}voidcheck_union_passing2(union un2 u ATTRIBUTE_UNUSED){ check_int_arguments;}voidcheck_union_passing3(union un3 u ATTRIBUTE_UNUSED){ check_int_arguments;}#define check_union_passing1 WRAP_CALL(check_union_passing1)#define check_union_passing2 WRAP_CALL(check_union_passing2)#define check_union_passing3 WRAP_CALL(check_union_passing3)intmain (void){ union un1 u1;#ifdef CHECK_LARGER_UNION_PASSING union un2 u2; union un3 u3; struct int_struct is; struct long_struct ls;#endif /* CHECK_LARGER_UNION_PASSING */ /* Check a union with char, int. */ clear_struct_registers; u1.i = 0; /* clear the struct to not have high bits left */ u1.c = 32; iregs.I0 = 32; num_iregs = 1; clear_int_hardware_registers; check_union_passing1(u1); u1.i = 0; /* clear the struct to not have high bits left */ u1.i = 33; iregs.I0 = 33; num_iregs = 1; clear_int_hardware_registers; check_union_passing1(u1); /* Check a union with char, long, char. */#ifdef CHECK_LARGER_UNION_PASSING clear_struct_registers; u2.l = 0; /* clear the struct to not have high bits left */ u2.c1 = 34; iregs.I0 = 34; num_iregs = 1; clear_int_hardware_registers; check_union_passing2(u2); u2.l = 0; /* clear the struct to not have high bits left */ u2.l = 35; iregs.I0 = 35; num_iregs = 1; clear_int_hardware_registers; check_union_passing2(u2); u2.l = 0; /* clear the struct to not have high bits left */ u2.c2 = 36; iregs.I0 = 36; num_iregs = 1; clear_int_hardware_registers; check_union_passing2(u2); /* check a union containing two structs and a union. */ clear_struct_registers; is.i = 37; u3.ls.l = 0; /* clear the struct to not have high bits left */ u3.is = is; iregs.I0 = 37; num_iregs = 1; clear_int_hardware_registers; check_union_passing3(u3); ls.l = 38; u3.ls.l = 0; /* clear the struct to not have high bits left */ u3.ls = ls; iregs.I0 = 38; num_iregs = 1; clear_int_hardware_registers; check_union_passing3(u3); u1.c = 39; u3.ls.l = 0; /* clear the struct to not have high bits left */ u3.un = u1; iregs.I0 = 39; num_iregs = 1; clear_int_hardware_registers; check_union_passing3(u3); u1.i = 40; u3.ls.l = 0; /* clear the struct to not have high bits left */ u3.un = u1; iregs.I0 = 40; num_iregs = 1; clear_int_hardware_registers; check_union_passing3(u3);#endif /* CHECK_LARGER_UNION_PASSING */ return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?