[OpenMP] Fix embedding offload code when there is no offloading toolchain
authorJoseph Huber <jhuber6@vols.utk.edu>
Tue, 10 May 2022 17:19:16 +0000 (13:19 -0400)
committerJoseph Huber <jhuber6@vols.utk.edu>
Tue, 10 May 2022 17:33:20 +0000 (13:33 -0400)
Summary:
We use the `--offload-new-driver` option to enable offload code
embedding. The check for when to do this was flawed and was enabling it
too early in the case of OpenMP, causing a segfault when dereferencing
the offloading toolchain.

clang/lib/Driver/ToolChains/Clang.cpp

index 4fc1263..6934b8d 100644 (file)
@@ -4405,8 +4405,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
       (JA.isHostOffloading(Action::OFK_OpenMP) &&
        Args.hasFlag(options::OPT_fopenmp_new_driver,
                     options::OPT_no_offload_new_driver, true)) ||
-      Args.hasFlag(options::OPT_offload_new_driver,
-                   options::OPT_no_offload_new_driver, false);
+      (JA.isHostOffloading(C.getActiveOffloadKinds()) &&
+       Args.hasFlag(options::OPT_offload_new_driver,
+                    options::OPT_no_offload_new_driver, false));
+
   bool IsUsingLTO = D.isUsingLTO(IsDeviceOffloadAction);
   auto LTOMode = D.getLTOMode(IsDeviceOffloadAction);