diff --git a/clang-tools-extra/clangd/HeaderSourceSwitch.cpp b/clang-tools-extra/clangd/HeaderSourceSwitch.cpp index d54c3668570eb..e5d62ff68627a 100644 --- a/clang-tools-extra/clangd/HeaderSourceSwitch.cpp +++ b/clang-tools-extra/clangd/HeaderSourceSwitch.cpp @@ -21,10 +21,10 @@ namespace clangd { std::optional getCorrespondingHeaderOrSource( PathRef OriginalFile, llvm::IntrusiveRefCntPtr VFS) { llvm::StringRef SourceExtensions[] = {".cpp", ".c", ".cc", ".cxx", - ".c++", ".m", ".mm"}; + ".c++", ".m", ".mm", ".cu", ".hip"}; llvm::StringRef HeaderExtensions[] = {".h", ".hh", ".hpp", ".hxx", ".inc", ".cppm", ".ccm", ".cxxm", - ".c++m", ".ixx"}; + ".c++m", ".ixx", ".cuh", ".hiph"}; llvm::StringRef PathExt = llvm::sys::path::extension(OriginalFile); diff --git a/clang/include/clang/Driver/Types.def b/clang/include/clang/Driver/Types.def index 76944ec656917..2dc047716dcaa 100644 --- a/clang/include/clang/Driver/Types.def +++ b/clang/include/clang/Driver/Types.def @@ -58,6 +58,10 @@ TYPE("objective-c++", ObjCXX, PP_ObjCXX, "mm", phases TYPE("hlsl", HLSL, PP_CXX, "hlsl", phases::Preprocess, phases::Compile, phases::Backend, phases::Assemble) // C family input files to precompile. +TYPE("cuda-header-cpp-output", PP_CUDA_Header, INVALID, "cuih", phases::Precompile) +TYPE("cuda-header", CUDA_Header, PP_CUDA_Header, "cuh", phases::Preprocess, phases::Precompile) +TYPE("hip-header-cpp-output", PP_HIP_Header, INVALID, "hiphi", phases::Precompile) +TYPE("hip-header", HIP_Header, PP_HIP_Header, "hiph", phases::Preprocess, phases::Precompile) TYPE("c-header-cpp-output", PP_CHeader, INVALID, "i", phases::Precompile) TYPE("c-header", CHeader, PP_CHeader, "h", phases::Preprocess, phases::Precompile) TYPE("cl-header", CLHeader, PP_CHeader, "h", phases::Preprocess, phases::Precompile) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index 08866e89ea447..24fcf1fbd9c02 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -329,6 +329,7 @@ types::ID types::lookupTypeForExtension(llvm::StringRef Ext) { .Case("clii", TY_PP_CLCXX) .Case("cp", TY_CXX) .Case("cu", TY_CUDA) + .Case("cuh", TY_CUDA_Header) .Case("hh", TY_CXXHeader) .Case("ii", TY_PP_CXX) .Case("ll", TY_LLVM_IR) @@ -361,6 +362,7 @@ types::ID types::lookupTypeForExtension(llvm::StringRef Ext) { .Case("gch", TY_PCH) .Case("hip", TY_HIP) .Case("hipi", TY_PP_HIP) + .Case("hiph", TY_HIP_Header) .Case("hpp", TY_CXXHeader) .Case("hxx", TY_CXXHeader) .Case("iim", TY_PP_CXXModule) @@ -443,5 +445,11 @@ ID types::lookupHeaderTypeForSourceType(ID Id) { case types::TY_CL: case types::TY_CLCXX: return types::TY_CLHeader; + case types::TY_CUDA: + case types::TY_CUDA_DEVICE: + return types::TY_CUDA_Header; + case types::TY_HIP: + case types::TY_HIP_DEVICE: + return types::TY_HIP_Header; } } diff --git a/clang/lib/Frontend/FrontendOptions.cpp b/clang/lib/Frontend/FrontendOptions.cpp index 32ed99571e85d..62d6f64812b36 100644 --- a/clang/lib/Frontend/FrontendOptions.cpp +++ b/clang/lib/Frontend/FrontendOptions.cpp @@ -25,13 +25,13 @@ InputKind FrontendOptions::getInputKindForExtension(StringRef Extension) { .Cases("mm", "M", Language::ObjCXX) .Case("mii", InputKind(Language::ObjCXX).getPreprocessed()) .Cases("C", "cc", "cp", Language::CXX) - .Cases("cpp", "CPP", "c++", "cxx", "hpp", "hxx", Language::CXX) + .Cases("cpp", "CPP", "c++", "cxx", "hpp", "hxx", "cuh", Language::CXX) .Case("cppm", Language::CXX) .Cases("iim", "iih", InputKind(Language::CXX).getPreprocessed()) .Case("cl", Language::OpenCL) .Case("clcpp", Language::OpenCLCXX) .Cases("cu", "cuh", Language::CUDA) - .Case("hip", Language::HIP) + .Cases("hip", "hiph", Language::HIP) .Cases("ll", "bc", Language::LLVM_IR) .Case("hlsl", Language::HLSL) .Case("cir", Language::CIR) diff --git a/clang/lib/InstallAPI/HeaderFile.cpp b/clang/lib/InstallAPI/HeaderFile.cpp index 0b7041ec8147e..f117800b1ef79 100644 --- a/clang/lib/InstallAPI/HeaderFile.cpp +++ b/clang/lib/InstallAPI/HeaderFile.cpp @@ -38,7 +38,7 @@ std::optional createIncludeHeaderName(const StringRef FullPath) { bool isHeaderFile(StringRef Path) { return StringSwitch(sys::path::extension(Path)) - .Cases(".h", ".H", ".hh", ".hpp", ".hxx", true) + .Cases(".h", ".H", ".hh", ".hpp", ".hxx", ".cuh", ".hiph", true) .Default(false); } diff --git a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp index 995019ca5a4d4..e42f55cef0b7d 100644 --- a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp +++ b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp @@ -115,9 +115,14 @@ static types::ID foldType(types::ID Lang) { case types::TY_ObjCXX: case types::TY_ObjCXXHeader: return types::TY_ObjCXX; - case types::TY_CUDA: - case types::TY_CUDA_DEVICE: - return types::TY_CUDA; + case types::TY_CUDA: + case types::TY_CUDA_DEVICE: + case types::TY_CUDA_Header: + return types::TY_CUDA; + case types::TY_HIP: + case types::TY_HIP_DEVICE: + case types::TY_HIP_Header: + return types::TY_HIP; default: return types::TY_INVALID; }