Index: clang/lib/Driver/ToolChains/AMDGPU.cpp =================================================================== --- clang/lib/Driver/ToolChains/AMDGPU.cpp +++ clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -517,12 +517,19 @@ return; } - CC1Args.push_back("-internal-isystem"); - CC1Args.push_back(DriverArgs.MakeArgString(getIncludePath())); if (UsesRuntimeWrapper) CC1Args.append({"-include", "__clang_hip_runtime_wrapper.h"}); } +void RocmInstallationDetector::AddPostSystemHIPIncludeArgs( + const ArgList &DriverArgs, ArgStringList &CC1Args) const { + if (DriverArgs.hasArg(options::OPT_nogpuinc)) + return; + + CC1Args.push_back("-internal-isystem"); + CC1Args.push_back(DriverArgs.MakeArgString(getIncludePath())); +} + void amdgpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, Index: clang/lib/Driver/ToolChains/CrossWindows.cpp =================================================================== --- clang/lib/Driver/ToolChains/CrossWindows.cpp +++ clang/lib/Driver/ToolChains/CrossWindows.cpp @@ -255,6 +255,7 @@ } AddSystemAfterIncludes(); addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include"); + RocmInstallation.AddPostSystemHIPIncludeArgs(DriverArgs, CC1Args); } void CrossWindowsToolChain:: Index: clang/lib/Driver/ToolChains/Darwin.cpp =================================================================== --- clang/lib/Driver/ToolChains/Darwin.cpp +++ clang/lib/Driver/ToolChains/Darwin.cpp @@ -2251,6 +2251,8 @@ llvm::sys::path::append(P, "usr", "include"); addExternCSystemInclude(DriverArgs, CC1Args, P.str()); } + + RocmInstallation.AddPostSystemHIPIncludeArgs(DriverArgs, CC1Args); } bool DarwinClang::AddGnuCPlusPlusIncludePaths(const llvm::opt::ArgList &DriverArgs, Index: clang/lib/Driver/ToolChains/Linux.cpp =================================================================== --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -605,6 +605,8 @@ if (!DriverArgs.hasArg(options::OPT_nobuiltininc) && getTriple().isMusl()) addSystemInclude(DriverArgs, CC1Args, ResourceDirInclude); + + RocmInstallation.AddPostSystemHIPIncludeArgs(DriverArgs, CC1Args); } void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, Index: clang/lib/Driver/ToolChains/MSVC.cpp =================================================================== --- clang/lib/Driver/ToolChains/MSVC.cpp +++ clang/lib/Driver/ToolChains/MSVC.cpp @@ -718,6 +718,8 @@ }; addSystemIncludes(DriverArgs, CC1Args, Paths); #endif + + RocmInstallation.AddPostSystemHIPIncludeArgs(DriverArgs, CC1Args); } void MSVCToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, Index: clang/lib/Driver/ToolChains/MinGW.cpp =================================================================== --- clang/lib/Driver/ToolChains/MinGW.cpp +++ clang/lib/Driver/ToolChains/MinGW.cpp @@ -588,6 +588,8 @@ Base + SubdirName + llvm::sys::path::get_separator() + "include"); addSystemInclude(DriverArgs, CC1Args, Base + "include"); + + RocmInstallation.AddPostSystemHIPIncludeArgs(DriverArgs, CC1Args); } void toolchains::MinGW::AddClangCXXStdlibIncludeArgs( Index: clang/lib/Driver/ToolChains/OpenBSD.cpp =================================================================== --- clang/lib/Driver/ToolChains/OpenBSD.cpp +++ clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -313,6 +313,8 @@ } addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/usr/include"); + + RocmInstallation.AddPostSystemHIPIncludeArgs(DriverArgs, CC1Args); } void OpenBSD::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, Index: clang/lib/Driver/ToolChains/ROCm.h =================================================================== --- clang/lib/Driver/ToolChains/ROCm.h +++ clang/lib/Driver/ToolChains/ROCm.h @@ -255,9 +255,16 @@ return LibDeviceMap.lookup(Gpu); } + /// Add HIP wrapper include path arguments which need to be before system + /// include paths. void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const; + /// Add HIP include path arguments which need to be after system include + /// paths. + void AddPostSystemHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const; + void detectDeviceLibrary(); void detectHIPRuntime(); Index: clang/test/Driver/hip-include-path.hip =================================================================== --- clang/test/Driver/hip-include-path.hip +++ clang/test/Driver/hip-include-path.hip @@ -19,24 +19,24 @@ // COMMON-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1" // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" -// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" -// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // HIP-SAME: "-include" "__clang_hip_runtime_wrapper.h" // NOHIP-NOT: "-include" "__clang_hip_runtime_wrapper.h" // skip check of standard C++ include path // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" +// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" +// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // COMMON-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1" // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" -// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" -// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // HIP-SAME: "-include" "__clang_hip_runtime_wrapper.h" // NOHIP-NOT: "-include" "__clang_hip_runtime_wrapper.h" // skip check of standard C++ include path // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" +// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" +// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // RUN: %clang -c -### -target x86_64-unknown-linux-gnu --cuda-gpu-arch=gfx900 \ // RUN: -std=c++11 --rocm-path=%S/Inputs/rocm -nogpulib %s 2>&1 \ @@ -45,7 +45,7 @@ // ROCM35-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1" // ROCM35-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" // ROCM35-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}" -// ROCM35-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" // ROCM35-NOT: "-include" "__clang_hip_runtime_wrapper.h" // skip check of standard C++ include path // ROCM35-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" +// ROCM35-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include"