From 20fca52da739ebefa47e35f6b338bb99a0da3cfe Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 6 Sep 2022 16:30:02 +0200 Subject: [PATCH] Build fixes for LLVM/Clang 15.0.0 Change-Id: Icc39a0b1acffb5a6a4798b1259d8ad4e7dd47bc5 --- CMakeLists.txt | 6 ++++++ src/PreProcessorVisitor.cpp | 2 +- src/PreProcessorVisitor.h | 2 +- src/SourceCompatibilityHelpers.h | 15 +++++++++++++++ src/Utils.cpp | 3 ++- src/checkbase.cpp | 4 ++-- src/checkbase.h | 4 ++-- src/checks/manuallevel/qt6-fwd-fixes.cpp | 2 +- src/checks/manuallevel/qt6-fwd-fixes.h | 2 +- src/checks/manuallevel/qt6-header-fixes.cpp | 2 +- src/checks/manuallevel/qt6-header-fixes.h | 2 +- 11 files changed, 33 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c780b0d..100135af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,6 +114,10 @@ else() set(clang_tooling_refactoring_lib clangToolingRefactor) endif() +if (${LLVM_VERSION} VERSION_GREATER_EQUAL "15.0.0") + set(clang_support_lib clangSupport) +endif() + macro(link_to_llvm name is_standalone) if (CLAZY_LINK_CLANG_DYLIB) target_link_libraries(${name} clang-cpp) @@ -131,6 +135,7 @@ macro(link_to_llvm name is_standalone) target_link_libraries(${name} ${clang_lib}) endforeach() + target_link_libraries(${name} ${clang_support_lib}) target_link_libraries(${name} clangTooling) target_link_libraries(${name} clangToolingCore) target_link_libraries(${name} ${clang_tooling_refactoring_lib}) @@ -302,6 +307,7 @@ else() clangFrontendTool clangRewrite clangSerialization + ${clang_support_lib} clangTooling clangStaticAnalyzerCheckers clangStaticAnalyzerCore diff --git a/src/PreProcessorVisitor.cpp b/src/PreProcessorVisitor.cpp index 5e63a131..5fdfe5f3 100644 --- a/src/PreProcessorVisitor.cpp +++ b/src/PreProcessorVisitor.cpp @@ -185,7 +185,7 @@ void PreProcessorVisitor::MacroExpands(const Token &MacroNameTok, const MacroDef void PreProcessorVisitor::InclusionDirective (clang::SourceLocation, const clang::Token &, clang::StringRef FileName, bool IsAngled, clang::CharSourceRange FilenameRange, - const clang::FileEntry *, clang::StringRef, clang::StringRef, + clazy::OptionalFileEntryRef, clang::StringRef, clang::StringRef, const clang::Module *, clang::SrcMgr::CharacteristicKind) { if (m_ci.getPreprocessor().isInPrimaryFile() && !clazy::endsWith(FileName.str(), ".moc")) { diff --git a/src/PreProcessorVisitor.h b/src/PreProcessorVisitor.h index dc80ff36..1bb17a5e 100644 --- a/src/PreProcessorVisitor.h +++ b/src/PreProcessorVisitor.h @@ -71,7 +71,7 @@ protected: clang::SourceRange range, const clang::MacroArgs *) override; void InclusionDirective (clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, clang::CharSourceRange FilenameRange, - const clang::FileEntry *File, clang::StringRef SearchPath, clang::StringRef RelativePath, + clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType) override; private: std::string getTokenSpelling(const clang::MacroDefinition &) const; diff --git a/src/SourceCompatibilityHelpers.h b/src/SourceCompatibilityHelpers.h index 4ea923a2..c1a23a4b 100644 --- a/src/SourceCompatibilityHelpers.h +++ b/src/SourceCompatibilityHelpers.h @@ -144,6 +144,21 @@ inline bool contains_lower(clang::StringRef haystack, clang::StringRef needle) #endif } +#if LLVM_VERSION_MAJOR >= 15 +using OptionalFileEntryRef = clang::Optional; +#else +using OptionalFileEntryRef = const clang::FileEntry*; +#endif + +inline bool isAscii(clang::StringLiteral *lt) +{ +#if LLVM_VERSION_MAJOR >= 15 + return lt->isOrdinary(); +#else + return lt->isAscii(); +#endif +} + } #endif diff --git a/src/Utils.cpp b/src/Utils.cpp index 3cdf7876..70e0577c 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -25,6 +25,7 @@ #include "Utils.h" #include "StringUtils.h" #include "HierarchyUtils.h" +#include "SourceCompatibilityHelpers.h" #include "StmtBodyRange.h" #include "clazy_stl.h" @@ -670,7 +671,7 @@ const CXXRecordDecl *Utils::recordForMemberCall(CXXMemberCallExpr *call, string bool Utils::isAscii(StringLiteral *lt) { // 'é' for some reason has isAscii() == true, so also call containsNonAsciiOrNull - return lt && lt->isAscii() && !lt->containsNonAsciiOrNull(); + return lt && clazy::isAscii(lt) && !lt->containsNonAsciiOrNull(); } bool Utils::isInDerefExpression(Stmt *s, ParentMap *map) diff --git a/src/checkbase.cpp b/src/checkbase.cpp index f5936dfd..dcc7c999 100644 --- a/src/checkbase.cpp +++ b/src/checkbase.cpp @@ -105,7 +105,7 @@ void ClazyPreprocessorCallbacks::MacroDefined(const Token ¯oNameTok, const M } void ClazyPreprocessorCallbacks::InclusionDirective(clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, - clang::CharSourceRange FilenameRange, const clang::FileEntry *File, clang::StringRef SearchPath, + clang::CharSourceRange FilenameRange, clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType) { check->VisitInclusionDirective(HashLoc, IncludeTok, FileName, IsAngled, FilenameRange, File, SearchPath, RelativePath, Imported, FileType); @@ -182,7 +182,7 @@ void CheckBase::VisitEndif(SourceLocation, SourceLocation) } void CheckBase::VisitInclusionDirective(clang::SourceLocation , const clang::Token &, clang::StringRef , bool , - clang::CharSourceRange , const clang::FileEntry *, clang::StringRef , + clang::CharSourceRange , clazy::OptionalFileEntryRef, clang::StringRef , clang::StringRef , const clang::Module *, clang::SrcMgr::CharacteristicKind ) { // Overriden in derived classes diff --git a/src/checkbase.h b/src/checkbase.h index c5db2daf..02f6a6bf 100644 --- a/src/checkbase.h +++ b/src/checkbase.h @@ -91,7 +91,7 @@ public: void Else(clang::SourceLocation loc, clang::SourceLocation ifLoc) override; void Endif(clang::SourceLocation loc, clang::SourceLocation ifLoc) override; void InclusionDirective(clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, - clang::CharSourceRange FilenameRange, const clang::FileEntry *File, clang::StringRef SearchPath, + clang::CharSourceRange FilenameRange, clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType) override; private: CheckBase *const check; @@ -151,7 +151,7 @@ protected: virtual void VisitElse(clang::SourceLocation loc, clang::SourceLocation ifLoc); virtual void VisitEndif(clang::SourceLocation loc, clang::SourceLocation ifLoc); virtual void VisitInclusionDirective(clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, - clang::CharSourceRange FilenameRange, const clang::FileEntry *File, clang::StringRef SearchPath, + clang::CharSourceRange FilenameRange, clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType); void enablePreProcessorCallbacks(); diff --git a/src/checks/manuallevel/qt6-fwd-fixes.cpp b/src/checks/manuallevel/qt6-fwd-fixes.cpp index 83bf81ee..c87d9ca0 100644 --- a/src/checks/manuallevel/qt6-fwd-fixes.cpp +++ b/src/checks/manuallevel/qt6-fwd-fixes.cpp @@ -166,7 +166,7 @@ void Qt6FwdFixes::VisitDecl(clang::Decl *decl) } void Qt6FwdFixes::VisitInclusionDirective(clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, - clang::CharSourceRange FilenameRange, const clang::FileEntry *File, clang::StringRef SearchPath, + clang::CharSourceRange FilenameRange, clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType) { auto current_file = m_sm.getFilename(HashLoc); diff --git a/src/checks/manuallevel/qt6-fwd-fixes.h b/src/checks/manuallevel/qt6-fwd-fixes.h index 37b59d95..bb928ba6 100644 --- a/src/checks/manuallevel/qt6-fwd-fixes.h +++ b/src/checks/manuallevel/qt6-fwd-fixes.h @@ -47,7 +47,7 @@ public: explicit Qt6FwdFixes(const std::string &name, ClazyContext *context); void VisitDecl(clang::Decl *decl) override; void VisitInclusionDirective(clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, - clang::CharSourceRange FilenameRange, const clang::FileEntry *File, clang::StringRef SearchPath, + clang::CharSourceRange FilenameRange, clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType) override; bool m_including_qcontainerfwd = false; std::set m_qcontainerfwd_included_in_files; diff --git a/src/checks/manuallevel/qt6-header-fixes.cpp b/src/checks/manuallevel/qt6-header-fixes.cpp index d458b77c..aaa28093 100644 --- a/src/checks/manuallevel/qt6-header-fixes.cpp +++ b/src/checks/manuallevel/qt6-header-fixes.cpp @@ -270,7 +270,7 @@ Qt6HeaderFixes::Qt6HeaderFixes(const std::string &name, ClazyContext *context) } void Qt6HeaderFixes::VisitInclusionDirective(clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, - clang::CharSourceRange FilenameRange, const clang::FileEntry *File, clang::StringRef SearchPath, + clang::CharSourceRange FilenameRange, clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType) { if (shouldIgnoreFile(HashLoc)) diff --git a/src/checks/manuallevel/qt6-header-fixes.h b/src/checks/manuallevel/qt6-header-fixes.h index ae09f7ad..8ffbb100 100644 --- a/src/checks/manuallevel/qt6-header-fixes.h +++ b/src/checks/manuallevel/qt6-header-fixes.h @@ -46,7 +46,7 @@ class Qt6HeaderFixes public: explicit Qt6HeaderFixes(const std::string &name, ClazyContext *context); void VisitInclusionDirective(clang::SourceLocation HashLoc, const clang::Token &IncludeTok, clang::StringRef FileName, bool IsAngled, - clang::CharSourceRange FilenameRange, const clang::FileEntry *File, clang::StringRef SearchPath, + clang::CharSourceRange FilenameRange, clazy::OptionalFileEntryRef File, clang::StringRef SearchPath, clang::StringRef RelativePath, const clang::Module *Imported, clang::SrcMgr::CharacteristicKind FileType) override; }; -- GitLab