From 24aa6cf727d13f137fc51b069aea49be30175cda Mon Sep 17 00:00:00 2001 From: Virgile Prevosto <virgile.prevosto@m4x.org> Date: Thu, 18 Jun 2020 16:45:21 +0200 Subject: [PATCH] [compat] Enable LLVM-10 compatibility --- ClangVisitor.cpp | 13 +++++++++++-- Clang_utils.h | 11 +++++++++++ Makefile.clang | 9 +++++++++ Makefile.config.in | 1 + configure.ac | 1 + 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/ClangVisitor.cpp b/ClangVisitor.cpp index 79918c99..73c4e655 100644 --- a/ClangVisitor.cpp +++ b/ClangVisitor.cpp @@ -541,7 +541,11 @@ init_expr FramacVisitor::make_explicit_initializer_list(const clang::Expr* e) { // but there might be cases where clang give the list directly in e. if (e->getStmtClass() == clang::Stmt::MaterializeTemporaryExprClass) { auto tmp = llvm::dyn_cast<const clang::MaterializeTemporaryExpr>(e); +#if CLANG_VERSION_MAJOR >= 10 + e = tmp->getSubExpr(); +#else e = tmp->GetTemporaryExpr(); +#endif } assert("Expecting an InitListExpr under a CXXStdInitializeListExpr" && e->getStmtClass() == clang::Stmt::InitListExprClass); @@ -2294,8 +2298,13 @@ exp_node FramacVisitor::makeMaterializeTemporaryExpression( expression etmp = expression_cons(loc, exp_node_Variable(variable_Local(qtmp))); _implicitThisStar = etmp; - init_expr temp = - makeInitExpr(tmpExpr->getType(), tmpExpr->GetTemporaryExpr(), shouldDelay); + const clang::Expr* e = +#if CLANG_VERSION_MAJOR >= 10 + tmpExpr->getSubExpr(); +#else + tmpExpr->GetTemporaryExpr(); +#endif + init_expr temp = makeInitExpr(tmpExpr->getType(), e, shouldDelay); qual_type temp_type = makeDefaultType(tmpExpr->getExprLoc(), tmpExpr->getType()); _implicitThisStar = oldThisStar; diff --git a/Clang_utils.h b/Clang_utils.h index 6487e60f..127e3bb6 100644 --- a/Clang_utils.h +++ b/Clang_utils.h @@ -792,8 +792,19 @@ public: clang::SourceLocation getSourceLocation(const location loc) const { if (!loc) return clang::SourceLocation(); const clang::SourceManager& sm = _context->getSourceManager(); +#if CLANG_VERSION_MAJOR >= 10 + auto fileOpt = sm.getFileManager().getFileRef(std::string(loc->filename1)); + if (fileOpt) { + const clang::FileEntry& file = fileOpt.get().getFileEntry(); + return sm.translateFileLineCol(&file, loc->linenum1, loc->charnum1); + } else { + // use dummy FileID if we don't have a valid FileEntry + return sm.translateLineCol(clang::FileID(), loc->linenum1, loc->charnum1); + } +#else const clang::FileEntry* file=sm.getFileManager().getFile(std::string(loc->filename1)); return sm.translateFileLineCol(file,loc->linenum1,loc->charnum1); +#endif } }; diff --git a/Makefile.clang b/Makefile.clang index 8c764895..0ed0ef99 100644 --- a/Makefile.clang +++ b/Makefile.clang @@ -71,9 +71,18 @@ CFLAGS+=-g CLANG_LINKFLAGS+=-g endif +LLVM_MAJOR:= $(shell echo $(LLVM_VERSION) | sed -e 's/^\([0-9]*\).*/\1/') + +LLVM_MAJOR_10:= \ + $(shell if test $(LLVM_MAJOR) -ge 10; then echo "yes"; else echo "no"; fi) + #LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser support mc +ifeq ("$(LLVM_MAJOR_10)","yes") +USEDLIBS=clang-cpp +else USEDLIBS = clangFrontend clangDriver clangParse clangSema clangAnalysis \ clangEdit clangAST clangLex clangSerialization clangBasic +endif # for use in main Makefile default: $(PLUGIN_DIR)/bin/$(TOOLNAME) diff --git a/Makefile.config.in b/Makefile.config.in index 66c59569..ca946f8e 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -30,6 +30,7 @@ CLANG_LINKFLAGS=@CLANG_LINKFLAGS@ CLANG_SYSLIBS=@CLANG_SYSLIBS@ CLANG_BIN_DIR=@CLANG_BIN_DIR@ LLVM_LIBS=@LLVM_LIBS@ +LLVM_VERSION=@LLVM_VERSION@ DEFAULT_FC_C_HEADERS=@DEFAULT_FC_C_HEADERS@ DEFAULT_FC_CXX_HEADERS=@DEFAULT_FC_CXX_HEADERS@ RUN_TESTS=@RUN_TESTS@ diff --git a/configure.ac b/configure.ac index 2666b755..de47d309 100644 --- a/configure.ac +++ b/configure.ac @@ -53,6 +53,7 @@ AC_SUBST(CLANG_LINKFLAGS) AC_SUBST(CLANG_SYSLIBS) AC_SUBST(CLANG_BIN_DIR) AC_SUBST(LLVM_LIBS) +AC_SUBST(LLVM_VERSION) AC_SUBST(DEFAULT_FC_C_HEADERS) AC_SUBST(DEFAULT_FC_CXX_HEADERS) AC_SUBST(RUN_TESTS) -- GitLab