https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90779

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Andrew Stubbs from comment #4)
> The problem is that the variables are added to the offload_var_table but not
> exported so that libgomp cannot find the symbol at load time. This causes a
> fatal error in a mutex-locked section, which causes libgomp's atexit handler
> to hang trying to take the same lock.

They should be in offload_var_table and should not be exported, it is like any
static filescope variable marked for offload.

Completely wild guess, does incremental:

@@ -65,6 +65,8 @@
 #include "attribs.h"
 #include "asan.h"
 #include "dbgcnt.h"
+#include "omp-offload.h"
+#include "context.h"

 /* Hash set of poisoned variables in a bind expr.  */
 static hash_set<tree> *asan_poisoned_variables = NULL;
@@ -1350,7 +1352,15 @@
                            = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (t));
                          varpool_node *node = varpool_node::get (t);
                          if (node)
-                           node->offloadable = 1;
+                           {
+                             node->offloadable = 1;
+                             if (ENABLE_OFFLOADING && !DECL_EXTERNAL (t))
+                               {
+                                 g->have_offload = true;
+                                 if (!in_lto_p)
+                                   vec_safe_push (offload_vars, t);
+                               }
+                           }
                        }
                      break;
                    }

patch help?

Reply via email to