@@ -3231,14 +3231,10 @@ class OffloadingActionBuilder final {
32313231 if (auto *IA = dyn_cast<InputAction>(HostAction)) {
32323232 SYCLDeviceActions.clear ();
32333233
3234+ std::string InputName = IA->getInputArg ().getValue ();
32343235 // Objects should already be consumed with -foffload-static-lib
3235- const char * InputName = IA->getInputArg ().getValue ();
32363236 if (Args.hasArg (options::OPT_foffload_static_lib_EQ) &&
3237- HostAction->getType () == types::TY_Object &&
3238- llvm::sys::path::has_extension (InputName) &&
3239- types::lookupTypeForExtension (
3240- llvm::sys::path::extension (InputName).drop_front ()) ==
3241- types::TY_Object)
3237+ IA->getType () == types::TY_Object && isObjectFile (InputName))
32423238 return ABRT_Inactive;
32433239
32443240 for (unsigned I = 0 ; I < ToolChains.size (); ++I)
@@ -3255,11 +3251,7 @@ class OffloadingActionBuilder final {
32553251 // Check if the type of the file is the same as the action. Do not
32563252 // unbundle it if it is not. Do not unbundle .so files, for example,
32573253 // which are not object files.
3258- if (IA->getType () == types::TY_Object &&
3259- (!llvm::sys::path::has_extension (FileName) ||
3260- types::lookupTypeForExtension (
3261- llvm::sys::path::extension (FileName).drop_front ()) !=
3262- types::TY_Object))
3254+ if (IA->getType () == types::TY_Object && !isObjectFile (FileName))
32633255 return ABRT_Inactive;
32643256 // When creating FPGA device fat objects, all host objects are
32653257 // partially linked. Gather that list here.
@@ -3716,7 +3708,7 @@ class OffloadingActionBuilder final {
37163708 if (CanUseBundler && isa<InputAction>(HostAction) &&
37173709 InputArg->getOption ().getKind () == llvm::opt::Option::InputClass &&
37183710 !types::isSrcFile (HostAction->getType ())) {
3719- const char * InputName = InputArg->getValue ();
3711+ std::string InputName = InputArg->getValue ();
37203712 // Do not create an unbundling action for an object when we know a fat
37213713 // static library is being used. A separate unbundling action is created
37223714 // for all objects and the fat static library.
@@ -3728,10 +3720,7 @@ class OffloadingActionBuilder final {
37283720 // for objects is still needed.
37293721 if (C.getDefaultToolChain ().getTriple ().isWindowsMSVCEnvironment () ||
37303722 !(HostAction->getType () == types::TY_Object &&
3731- llvm::sys::path::has_extension (InputName) &&
3732- types::lookupTypeForExtension (
3733- llvm::sys::path::extension (InputName).drop_front ()) ==
3734- types::TY_Object &&
3723+ isObjectFile (InputName) &&
37353724 Args.hasArg (options::OPT_foffload_static_lib_EQ))) {
37363725 ActionList HostActionList;
37373726 Action *A (HostAction);
@@ -3740,10 +3729,7 @@ class OffloadingActionBuilder final {
37403729 HostAction->getType () != types::TY_FPGA_AOCR &&
37413730 HostAction->getType () != types::TY_FPGA_AOCX &&
37423731 !(HostAction->getType () == types::TY_Object &&
3743- llvm::sys::path::has_extension (InputName) &&
3744- types::lookupTypeForExtension (
3745- llvm::sys::path::extension (InputName).drop_front ()) ==
3746- types::TY_Object)) {
3732+ isObjectFile (InputName))) {
37473733 if (HasFPGADeviceBinary (C, InputArg->getAsString (Args), true ))
37483734 A = C.MakeAction <InputAction>(*InputArg, types::TY_FPGA_AOCX);
37493735 else if (HasFPGADeviceBinary (C, InputArg->getAsString (Args)))
@@ -4162,10 +4148,7 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
41624148 if (auto *IA = dyn_cast<InputAction>(LI)) {
41634149 std::string FileName = IA->getInputArg ().getAsString (Args);
41644150 if (IA->getType () == types::TY_Object &&
4165- (!llvm::sys::path::has_extension (FileName) ||
4166- types::lookupTypeForExtension (
4167- llvm::sys::path::extension (FileName).drop_front ()) !=
4168- types::TY_Object))
4151+ !isObjectFile (FileName))
41694152 // Pass the Input along to linker.
41704153 TempLinkerInputs.push_back (LI);
41714154 else
@@ -5816,3 +5799,9 @@ bool clang::driver::isOptimizationLevelFast(const ArgList &Args) {
58165799 return Args.hasFlag (options::OPT_Ofast, options::OPT_O_Group, false );
58175800}
58185801
5802+ bool clang::driver::isObjectFile (std::string FileName) {
5803+ return (llvm::sys::path::has_extension (FileName) &&
5804+ types::lookupTypeForExtension (
5805+ llvm::sys::path::extension (FileName).drop_front ()) ==
5806+ types::TY_Object);
5807+ }
0 commit comments