@@ -1,3 +1,7 @@
+2016-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.target/i386/iamcu/test_empty_structs_and_unions.c: New test.
+
2016-02-02 James Norris <jnorris@codesourcery.com>
* c-c++-common/goacc/routine-5.c: Add tests.
new file mode 100644
@@ -0,0 +1,61 @@
+/* This tests passing and returning of empty structures and unions. */
+
+#include "defines.h"
+#include "args.h"
+
+struct IntegerRegisters iregbits = { ~0, ~0, ~0, ~0, ~0, ~0 };
+struct IntegerRegisters iregs;
+unsigned int num_iregs;
+
+struct empty_struct
+{
+};
+
+struct empty_struct
+check_struct_passing(struct empty_struct s0 ATTRIBUTE_UNUSED,
+ struct empty_struct s1 ATTRIBUTE_UNUSED,
+ int i0 ATTRIBUTE_UNUSED)
+{
+ struct empty_struct s;
+ check_int_arguments;
+ return s;
+}
+
+#define check_struct_passing WRAP_CALL(check_struct_passing)
+
+union empty_union
+{
+};
+
+union empty_union
+check_union_passing(union empty_union u0 ATTRIBUTE_UNUSED,
+ union empty_union u1 ATTRIBUTE_UNUSED,
+ int i0 ATTRIBUTE_UNUSED)
+{
+ union empty_union u;
+ check_int_arguments;
+ return u;
+}
+
+#define check_union_passing WRAP_CALL(check_union_passing)
+
+int
+main (void)
+{
+ struct empty_struct s;
+ union empty_union u;
+
+ clear_struct_registers;
+ iregs.I0 = 32;
+ num_iregs = 1;
+ clear_int_hardware_registers;
+ check_union_passing(u,u,32);
+
+ clear_struct_registers;
+ iregs.I0 = 33;
+ num_iregs = 1;
+ clear_int_hardware_registers;
+ check_struct_passing(s,s,33);
+
+ return 0;
+}