HACK! regression/struct_kernel_arguments fails on i686
authorAndreas Beckmann <anbe@debian.org>
Thu, 17 Nov 2022 10:14:25 +0000 (10:14 +0000)
committerAndreas Beckmann <anbe@debian.org>
Thu, 17 Nov 2022 10:14:25 +0000 (10:14 +0000)
141/143 Test  #85: regression/struct_kernel_arguments ..................................................***Failed  Error regular expression found in output. Regex=[FAIL]  4.58 sec
CMake Error at /build/pocl-1.4/cmake/run_test.cmake:34 (message):
 FAIL: Test exited with nonzero code (1):
 /build/pocl-1.4/obj-i686-linux-gnu/tests/regression/test_structs_as_args
  STDOUT:

  F(4: 0 != 5) F(5: -2147483648 != 6) F(6: 0 != 7) F(7: 0 != 8)

  STDERR:

 -- OK
Bug: https://github.com/pocl/pocl/issues/801
Bug: https://github.com/KhronosGroup/OpenCL-Headers/issues/149
Forwarded: not-needed

Gbp-Pq: Name test_structs_as_args.patch

tests/regression/CMakeLists.txt
tests/regression/test_structs_as_args.cpp

index 9fec67f854f9fd12cc8c566c5841002df233214a..b82be75215e733a2d2ac809d8e8c1de59ea0e375 100644 (file)
@@ -272,6 +272,13 @@ add_test_pocl(NAME "regression/autolocals_in_constexprs" COMMAND "test_autolocal
 
 add_test_pocl(NAME "regression/struct_kernel_arguments" COMMAND "test_structs_as_args")
 
+if(0)
+if(LLC_HOST_CPU STREQUAL "i686")
+  set_tests_properties("regression/struct_kernel_arguments"
+    PROPERTIES WILL_FAIL 1)
+endif()
+endif()
+
 add_test_pocl(NAME "regression/vector_kernel_arguments" COMMAND "test_vectors_as_args")
 
 set(TCE_TESTS "regression/barrier_between_two_for_loops_LOOPS"
index 1b5fc4fb94157049b5f177e3472b3191844141eb..8b32faeea4da0f9a4f818d72a81783e1870d07ca 100644 (file)
@@ -54,21 +54,33 @@ struct int_pair {
     cl_long b;\r
 };\r
 \r
+// i386 has a default alignment of 4 even for 64-bit types\r
+#ifdef __i386__\r
+#define CL_LONG_ALIGNMENT __attribute__((aligned(8)))\r
+#define CL_DOUBLE_ALIGNMENT __attribute__((aligned(8)))\r
+#else\r
+#define CL_LONG_ALIGNMENT\r
+#define CL_DOUBLE_ALIGNMENT\r
+#endif\r
+\r
 struct test_struct {\r
     cl_int elementA;\r
     cl_int elementB;\r
-    cl_long elementC;\r
+    cl_long elementC CL_LONG_ALIGNMENT;\r
     cl_char elementD;\r
-    cl_long elementE;\r
+    cl_long elementE CL_LONG_ALIGNMENT;\r
     cl_float elementF;\r
     cl_short elementG;\r
 #ifdef _CL_DISABLE_DOUBLE\r
-    cl_long elementH;\r
+    cl_long elementH CL_LONG_ALIGNMENT;\r
 #else\r
-    cl_double elementH;\r
+    cl_double elementH CL_DOUBLE_ALIGNMENT;\r
 #endif\r
 };\r
 \r
+#undef CL_LONG_ALIGNMENT\r
+#undef CL_DOUBLE_ALIGNMENT\r
+\r
 static char\r
 kernelSourceCode[] = \r
 "typedef struct int_single {\n"\r