blob: 5fd49855696c229a96d8f5f3736b382eb6b0a6c7 [file] [log] [blame]
From fbbfc2757736be38ac38eb26c20bf6b36dd8fc6c Mon Sep 17 00:00:00 2001
From: Christopher Di Bella <cjdb@google.com>
Date: Tue, 9 Aug 2022 01:01:16 +0000
Subject: [PATCH] refactors so that the project is LLVM 15-compatible
* replaces `Invocation.setLangDefaults` with
`LangOptions::setLangDefaults`
* Fixes virtual interface
Fixes #74
Co-authored-by: Martin Liska <mliska@suse.cz>
---
clang_delta/ExpressionDetector.cpp | 16 +++++++++++++--
clang_delta/TransformationManager.cpp | 29 ++++++++++++++++++++++++---
2 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/clang_delta/ExpressionDetector.cpp b/clang_delta/ExpressionDetector.cpp
index 3e03982..b15983a 100644
--- a/clang_delta/ExpressionDetector.cpp
+++ b/clang_delta/ExpressionDetector.cpp
@@ -16,6 +16,9 @@
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/ASTContext.h"
+#if LLVM_VERSION_MAJOR >= 15
+#include "clang/Basic/FileEntry.h"
+#endif
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/Preprocessor.h"
@@ -62,7 +65,12 @@ public:
virtual void InclusionDirective(SourceLocation HashLoc,
const Token &IncludeTok,
StringRef FileName, bool IsAngled,
- CharSourceRange FilenameRange, const FileEntry *File,
+ CharSourceRange FilenameRange,
+#if LLVM_VERSION_MAJOR < 15
+ const FileEntry *File,
+#else
+ Optional<FileEntryRef> File,
+#endif
StringRef SearchPath, StringRef RelativePath,
const Module *Imported,
SrcMgr::CharacteristicKind FileType) override;
@@ -80,9 +88,13 @@ private:
void IncludesPPCallbacks::InclusionDirective(SourceLocation HashLoc,
const Token &/*IncludeTok*/,
StringRef FileName,
- bool /*IsAngled*/,
+ bool /*IsAngled*/,
CharSourceRange /*FilenameRange*/,
+#if LLVM_VERSION_MAJOR < 15
const FileEntry * /*File*/,
+#else
+ Optional<FileEntryRef> /*File*/,
+#endif
StringRef /*SearchPath*/,
StringRef /*RelativePath*/,
const Module * /*Imported*/,
diff --git a/clang_delta/TransformationManager.cpp b/clang_delta/TransformationManager.cpp
index b642c70..5af354c 100644
--- a/clang_delta/TransformationManager.cpp
+++ b/clang_delta/TransformationManager.cpp
@@ -20,6 +20,10 @@
#include "clang/Basic/Builtins.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/FileManager.h"
+#if LLVM_VERSION_MAJOR >= 15
+#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/LangStandard.h"
+#endif
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Frontend/CompilerInstance.h"
@@ -151,7 +155,7 @@ bool TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
Invocation.setLangDefaults(ClangInstance->getLangOpts(), InputKind(Language::CXX), T, PPOpts, LSTD);
}
else if(IK.getLanguage() == Language::OpenCL) {
-#else
+#elif LLVM_VERSION_MAJOR < 15
vector<string> includes;
if (IK.getLanguage() == Language::C) {
Invocation.setLangDefaults(ClangInstance->getLangOpts(), InputKind(Language::C), T, includes);
@@ -163,6 +167,18 @@ bool TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
Invocation.setLangDefaults(ClangInstance->getLangOpts(), InputKind(Language::CXX), T, includes, LSTD);
}
else if(IK.getLanguage() == Language::OpenCL) {
+#else
+ vector<string> includes;
+ if (IK.getLanguage() == Language::C) {
+ LangOptions::setLangDefaults(ClangInstance->getLangOpts(), Language::C, T, includes);
+ }
+ else if (IK.getLanguage() == Language::CXX) {
+ // ISSUE: it might cause some problems when building AST
+ // for a function which has a non-declared callee, e.g.,
+ // It results an empty AST for the caller.
+ LangOptions::setLangDefaults(ClangInstance->getLangOpts(), Language::CXX, T, includes, LSTD);
+ }
+ else if(IK.getLanguage() == Language::OpenCL) {
#endif
//Commandline parameters
std::vector<const char*> Args;
@@ -191,11 +207,18 @@ bool TransformationManager::initializeCompilerInstance(std::string &ErrorMsg)
&Args[0], &Args[0] + Args.size(),
#endif
ClangInstance->getDiagnostics());
+#if LLVM_VERSION_MAJOR < 15
Invocation.setLangDefaults(ClangInstance->getLangOpts(),
-#if LLVM_VERSION_MAJOR >= 10
- InputKind(Language::OpenCL),
#else
+ LangOptions::setLangDefaults(ClangInstance->getLangOpts(),
+#endif
+
+#if LLVM_VERSION_MAJOR < 10
InputKind::OpenCL,
+#elif LLVM_VERSION_MAJOR < 15
+ InputKind(Language::OpenCL),
+#else
+ Language::OpenCL,
#endif
#if LLVM_VERSION_MAJOR < 12
--
2.37.1.559.g78731f0fdb-goog