Hi, This patch makes sure that the lifetimes of the CUDA_ONE_CALL macro (which is defined twice in plugin-nvptx.c) are minimized, to make it obvious that the definitions are used only in the lib-cuda.def include.
Build on x86_64 with nvptx accelerator and reg-tested libgomp. Committed to trunk. Thanks, - Tom [libgomp, nvptx] Minimize lifetime of CUDA_ONE_CALL defines 2018-08-06 Tom de Vries <tdevr...@suse.de> * plugin/plugin-nvptx.c (struct cuda_lib_s, init_cuda_lib): Put CUDA_ONE_CALL defines right before the cuda-lib.def include, and the corresponding undefs right after. --- libgomp/plugin/plugin-nvptx.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index cc465b4addb2..2e72a6379eb9 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -52,10 +52,13 @@ #if PLUGIN_NVPTX_DYNAMIC # include <dlfcn.h> -# define CUDA_ONE_CALL(call) \ - __typeof (call) *call; struct cuda_lib_s { + +# define CUDA_ONE_CALL(call) \ + __typeof (call) *call; #include "cuda-lib.def" +# undef CUDA_ONE_CALL + } cuda_lib; /* -1 if init_cuda_lib has not been called yet, false @@ -74,18 +77,19 @@ init_cuda_lib (void) cuda_lib_inited = false; if (h == NULL) return false; -# undef CUDA_ONE_CALL + # define CUDA_ONE_CALL(call) CUDA_ONE_CALL_1 (call) # define CUDA_ONE_CALL_1(call) \ cuda_lib.call = dlsym (h, #call); \ if (cuda_lib.call == NULL) \ return false; #include "cuda-lib.def" +# undef CUDA_ONE_CALL +# undef CUDA_ONE_CALL_1 + cuda_lib_inited = true; return true; } -# undef CUDA_ONE_CALL -# undef CUDA_ONE_CALL_1 # define CUDA_CALL_PREFIX cuda_lib. #else # define CUDA_CALL_PREFIX