Browse Source

Merge topic 'fix_failing_ResolveDeviceSymbols_test'

81642989 Cuda: ResolveDeviceSymbols now properly execute everywhere.

Acked-by: Kitware Robot <[email protected]>
Merge-request: !1593
Brad King 8 years ago
parent
commit
44111e5cc0

+ 9 - 5
Tests/CudaOnly/ResolveDeviceSymbols/CMakeLists.txt

@@ -16,11 +16,11 @@ else()
 endif()
 
 #Goal for this example:
-#Build a static library that defines multiple methods and kernels that
-#use each other.
-#Use a custom command to build an executable that uses this static library
-#We do these together to verify that we can get a static library to do
-#device symbol linking, and not have it done when the executable is made
+# Build a static library that defines multiple methods and kernels that
+# use each other.
+# Resolve the device symbols into that static library
+# Verify that we can't use those device symbols from anything that links
+# to the static library
 string(APPEND CMAKE_CUDA_FLAGS " -gencode arch=compute_30,code=compute_30")
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CUDA_STANDARD 11)
@@ -43,6 +43,10 @@ add_custom_command(TARGET CUDAResolveDeviceLib POST_BUILD
 endif()
 
 add_executable(CudaOnlyResolveDeviceSymbols main.cu)
+set_target_properties(CudaOnlyResolveDeviceSymbols
+                      PROPERTIES
+                      CUDA_SEPARABLE_COMPILATION ON)
+
 target_link_libraries(CudaOnlyResolveDeviceSymbols PRIVATE CUDAResolveDeviceLib)
 
 if(APPLE)

+ 1 - 10
Tests/CudaOnly/ResolveDeviceSymbols/main.cu

@@ -62,17 +62,8 @@ int main(int argc, char** argv)
     return 0;
   }
 
-  cudaError_t err;
-  file2_launch_kernel(42);
-  err = cudaGetLastError();
-  if (err != cudaSuccess) {
-    std::cerr << "file2_launch_kernel: kernel launch failed: "
-              << cudaGetErrorString(err) << std::endl;
-    return 1;
-  }
-
   main_launch_kernel(1);
-  err = cudaGetLastError();
+  cudaError_t err = cudaGetLastError();
   if (err == cudaSuccess) {
     // This kernel launch should fail as the file2_func was device linked
     // into the static library and is not usable by the executable