[Openmp-commits] [openmp] r319811 - Fix alignment in teams-reduction.c test

Jonas Hahnfeld via Openmp-commits openmp-commits at lists.llvm.org
Tue Dec 5 10:45:21 PST 2017

Author: hahnfeld
Date: Tue Dec  5 10:45:21 2017
New Revision: 319811

URL: http://llvm.org/viewvc/llvm-project?rev=319811&view=rev
Fix alignment in teams-reduction.c test

The runtime will use the global kmp_critical_name as a lock and
tries to atomically store a pointer in there. This will fail
if the global is only aligned by 4 bytes, the size of one int32_t
element. Use a union to ensure the global is aligned to the size
of a pointer on the current platform.


Modified: openmp/trunk/runtime/test/misc_bugs/teams-reduction.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/misc_bugs/teams-reduction.c?rev=319811&r1=319810&r2=319811&view=diff
--- openmp/trunk/runtime/test/misc_bugs/teams-reduction.c (original)
+++ openmp/trunk/runtime/test/misc_bugs/teams-reduction.c Tue Dec  5 10:45:21 2017
@@ -30,7 +30,12 @@ typedef struct {
 static ident_t dummy_loc = {0, 2, 0, 0, ";dummyFile;dummyFunc;0;0;;"};
-typedef int32_t kmp_critical_name[8];
+typedef union {
+  // The global will be used as pointer, so we need to make sure that the
+  // compiler correctly aligns the global...
+  void *ptr;
+  int32_t data[8];
+} kmp_critical_name;
 kmp_critical_name crit;
 int32_t __kmpc_global_thread_num(ident_t *);

More information about the Openmp-commits mailing list