parent
f30b05419b
commit
bb4b1f1b33
@ -63,13 +63,6 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#define FATAL(x...) \
|
|
||||||
do { \
|
|
||||||
fprintf(stderr, "FATAL: " x); \
|
|
||||||
exit(1); \
|
|
||||||
\
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -106,14 +99,13 @@ llvmGetPassPluginInfo() {
|
|||||||
return {LLVM_PLUGIN_API_VERSION, "AutoTokensPass", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "AutoTokensPass", "v0.1",
|
||||||
/* lambda to insert our pass into the pass pipeline. */
|
/* lambda to insert our pass into the pass pipeline. */
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
[](ModulePassManager &MPM, OptimizationLevel OL
|
||||||
MPM.addPass(AutoTokensPass());
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
});
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
|
#endif
|
||||||
|
) { MPM.addPass(AutoTokensPass()); });
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -95,11 +95,12 @@ extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK
|
|||||||
llvmGetPassPluginInfo() {
|
llvmGetPassPluginInfo() {
|
||||||
return {LLVM_PLUGIN_API_VERSION, "CmpLogInstructions", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "CmpLogInstructions", "v0.1",
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
#if LLVM_VERSION_MAJOR >= 16
|
#if LLVM_VERSION_MAJOR >= 16
|
||||||
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
|
PB.registerPipelineStartEPCallback(
|
||||||
|
#else
|
||||||
PB.registerOptimizerEarlyEPCallback(
|
PB.registerOptimizerEarlyEPCallback(
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
#endif
|
#endif
|
||||||
|
@ -93,13 +93,14 @@ extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK
|
|||||||
llvmGetPassPluginInfo() {
|
llvmGetPassPluginInfo() {
|
||||||
return {LLVM_PLUGIN_API_VERSION, "CmpLogRoutines", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "CmpLogRoutines", "v0.1",
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
[](ModulePassManager &MPM, OptimizationLevel OL
|
||||||
MPM.addPass(CmpLogRoutines());
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
});
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
|
#endif
|
||||||
|
|
||||||
|
) { MPM.addPass(CmpLogRoutines()); });
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -218,13 +218,14 @@ llvmGetPassPluginInfo() {
|
|||||||
/* lambda to insert our pass into the pass pipeline. */
|
/* lambda to insert our pass into the pass pipeline. */
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
#if 1
|
#if 1
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
[](ModulePassManager &MPM, OptimizationLevel OL
|
||||||
MPM.addPass(AFLCoverage());
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
});
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
|
#endif
|
||||||
|
|
||||||
|
) { MPM.addPass(AFLCoverage()); });
|
||||||
/* TODO LTO registration */
|
/* TODO LTO registration */
|
||||||
#else
|
#else
|
||||||
using PipelineElement = typename PassBuilder::PipelineElement;
|
using PipelineElement = typename PassBuilder::PipelineElement;
|
||||||
|
@ -113,14 +113,13 @@ llvmGetPassPluginInfo() {
|
|||||||
return {LLVM_PLUGIN_API_VERSION, "CtxPass", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "CtxPass", "v0.1",
|
||||||
/* lambda to insert our pass into the pass pipeline. */
|
/* lambda to insert our pass into the pass pipeline. */
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
|
PB.registerOptimizerLastEPCallback([](ModulePassManager &MPM,
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
OptimizationLevel OL
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
#endif
|
#endif
|
||||||
PB.registerOptimizerLastEPCallback(
|
) { MPM.addPass(CtxPass()); });
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
|
||||||
MPM.addPass(CtxPass());
|
|
||||||
});
|
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -61,7 +61,6 @@
|
|||||||
#include "llvm/Support/ScopedPrinter.h"
|
#include "llvm/Support/ScopedPrinter.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include <llvm/Support/Debug.h>
|
#include <llvm/Support/Debug.h>
|
||||||
#include "llvm/Transforms/Instrumentation.h"
|
|
||||||
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
|
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
|
||||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||||
#include "llvm/Transforms/Utils/Local.h"
|
#include "llvm/Transforms/Utils/Local.h"
|
||||||
@ -774,13 +773,12 @@ llvmGetPassPluginInfo() {
|
|||||||
return {LLVM_PLUGIN_API_VERSION, "DDGInstrPass", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "DDGInstrPass", "v0.1",
|
||||||
/* lambda to insert our pass into the pass pipeline. */
|
/* lambda to insert our pass into the pass pipeline. */
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
[](ModulePassManager &MPM, OptimizationLevel OL
|
||||||
MPM.addPass(DDGInstrModulePass());
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
});
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
|
#endif
|
||||||
|
) { MPM.addPass(DDGInstrModulePass()); });
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#include "llvm/Support/ScopedPrinter.h"
|
#include "llvm/Support/ScopedPrinter.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include <llvm/Support/Debug.h>
|
#include <llvm/Support/Debug.h>
|
||||||
#include "llvm/Transforms/Instrumentation.h"
|
|
||||||
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
|
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
|
||||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||||
#include "llvm/Transforms/Utils/Local.h"
|
#include "llvm/Transforms/Utils/Local.h"
|
||||||
|
@ -61,7 +61,6 @@
|
|||||||
#include "llvm/Support/ScopedPrinter.h"
|
#include "llvm/Support/ScopedPrinter.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include <llvm/Support/Debug.h>
|
#include <llvm/Support/Debug.h>
|
||||||
#include "llvm/Transforms/Instrumentation.h"
|
|
||||||
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
|
#include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
|
||||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||||
#include "llvm/Transforms/Utils/Local.h"
|
#include "llvm/Transforms/Utils/Local.h"
|
||||||
|
@ -121,14 +121,14 @@ llvmGetPassPluginInfo() {
|
|||||||
return {LLVM_PLUGIN_API_VERSION, "DumpCfgPass", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "DumpCfgPass", "v0.1",
|
||||||
/* lambda to insert our pass into the pass pipeline. */
|
/* lambda to insert our pass into the pass pipeline. */
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
[](ModulePassManager &MPM, OptimizationLevel OL
|
||||||
MPM.addPass(DumpCfgPass());
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
});
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
|
#endif
|
||||||
|
|
||||||
|
) { MPM.addPass(DumpCfgPass()); });
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -113,14 +113,13 @@ llvmGetPassPluginInfo() {
|
|||||||
return {LLVM_PLUGIN_API_VERSION, "FunctionLoggingPass", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "FunctionLoggingPass", "v0.1",
|
||||||
/* lambda to insert our pass into the pass pipeline. */
|
/* lambda to insert our pass into the pass pipeline. */
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
[](ModulePassManager &MPM, OptimizationLevel OL
|
||||||
MPM.addPass(FunctionLogging());
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
});
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
|
#endif
|
||||||
|
) { MPM.addPass(FunctionLogging()); });
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -253,21 +253,28 @@ class AnalysisPass : public ModulePass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isMemorySensitiveFn(StringRef &n) {
|
bool isMemorySensitiveFn(StringRef &n) {
|
||||||
if (n.equals("write") || n.equals("read") || n.equals("fgets") ||
|
if (n.equals_insensitive("write") || n.equals_insensitive("read") ||
|
||||||
n.equals("memcmp") || n.equals("memcpy") || n.equals("mempcpy") ||
|
n.equals_insensitive("fgets") || n.equals_insensitive("memcmp") ||
|
||||||
n.equals("memmove") || n.equals("memset") || n.equals("memchr") ||
|
n.equals_insensitive("memcpy") || n.equals_insensitive("mempcpy") ||
|
||||||
n.equals("memrchr") || n.equals("memmem") || n.equals("bzero") ||
|
n.equals_insensitive("memmove") || n.equals_insensitive("memset") ||
|
||||||
n.equals("explicit_bzero") || n.equals("bcmp") || n.equals("strchr") ||
|
n.equals_insensitive("memchr") || n.equals_insensitive("memrchr") ||
|
||||||
n.equals("strrchr") || n.equals("strcasecmp") || n.equals("strncat") ||
|
n.equals_insensitive("memmem") || n.equals_insensitive("bzero") ||
|
||||||
n.equals("strerror") || n.equals("strncasecmp") || n.equals("strcat") ||
|
n.equals_insensitive("explicit_bzero") ||
|
||||||
n.equals("strcmp") || n.equals("strspn") || n.equals("strncmp") ||
|
n.equals_insensitive("bcmp") || n.equals_insensitive("strchr") ||
|
||||||
n.equals("strcpy") || n.equals("strncpy") || n.equals("strcoll") ||
|
n.equals_insensitive("strrchr") || n.equals_insensitive("strcasecmp") ||
|
||||||
n.equals("stpcpy") || n.equals("strdup") || n.equals("strlen") ||
|
n.equals_insensitive("strncat") || n.equals_insensitive("strerror") ||
|
||||||
n.equals("strxfrm") || n.equals("strtok") || n.equals("strnlen") ||
|
n.equals_insensitive("strncasecmp") || n.equals_insensitive("strcat") ||
|
||||||
n.equals("strstr") || n.equals("strcasestr") || n.equals("strscpn") ||
|
n.equals_insensitive("strcmp") || n.equals_insensitive("strspn") ||
|
||||||
n.equals("strpbrk") || n.equals("atoi") || n.equals("atol") ||
|
n.equals_insensitive("strncmp") || n.equals_insensitive("strcpy") ||
|
||||||
n.equals("atoll") || n.equals("wcslen") || n.equals("wcscpy") ||
|
n.equals_insensitive("strncpy") || n.equals_insensitive("strcoll") ||
|
||||||
n.equals("wcscmp")) {
|
n.equals_insensitive("stpcpy") || n.equals_insensitive("strdup") ||
|
||||||
|
n.equals_insensitive("strlen") || n.equals_insensitive("strxfrm") ||
|
||||||
|
n.equals_insensitive("strtok") || n.equals_insensitive("strnlen") ||
|
||||||
|
n.equals_insensitive("strstr") || n.equals_insensitive("strcasestr") ||
|
||||||
|
n.equals_insensitive("strscpn") || n.equals_insensitive("strpbrk") ||
|
||||||
|
n.equals_insensitive("atoi") || n.equals_insensitive("atol") ||
|
||||||
|
n.equals_insensitive("atoll") || n.equals_insensitive("wcslen") ||
|
||||||
|
n.equals_insensitive("wcscpy") || n.equals_insensitive("wcscmp")) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -275,11 +282,15 @@ class AnalysisPass : public ModulePass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isMallocFn(StringRef &n) {
|
bool isMallocFn(StringRef &n) {
|
||||||
if (n.equals("malloc") || n.equals("calloc") || n.equals("realloc") ||
|
if (n.equals_insensitive("malloc") || n.equals_insensitive("calloc") ||
|
||||||
n.equals("reallocarray") || n.equals("memalign") ||
|
n.equals_insensitive("realloc") ||
|
||||||
n.equals("__libc_memalign") || n.equals("aligned_alloc") ||
|
n.equals_insensitive("reallocarray") ||
|
||||||
n.equals("posix_memalign") || n.equals("valloc") ||
|
n.equals_insensitive("memalign") ||
|
||||||
n.equals("pvalloc") || n.equals("mmap")) {
|
n.equals_insensitive("__libc_memalign") ||
|
||||||
|
n.equals_insensitive("aligned_alloc") ||
|
||||||
|
n.equals_insensitive("posix_memalign") ||
|
||||||
|
n.equals_insensitive("valloc") || n.equals_insensitive("pvalloc") ||
|
||||||
|
n.equals_insensitive("mmap")) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -287,7 +298,8 @@ class AnalysisPass : public ModulePass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isFreeFn(StringRef &n) {
|
bool isFreeFn(StringRef &n) {
|
||||||
if (n.equals("free") || n.equals("cfree") || n.equals("munmap")) {
|
if (n.equals_insensitive("free") || n.equals_insensitive("cfree") ||
|
||||||
|
n.equals_insensitive("munmap")) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -304,11 +316,14 @@ class AnalysisPass : public ModulePass {
|
|||||||
// operator new(unsigned long, std::align_val_t)
|
// operator new(unsigned long, std::align_val_t)
|
||||||
// operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
|
// operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
|
||||||
|
|
||||||
if (n.equals("_Znam") || n.equals("_ZnamRKSt9nothrow_t") ||
|
if (n.equals_insensitive("_Znam") ||
|
||||||
n.equals("_ZnamSt11align_val_t") ||
|
n.equals_insensitive("_ZnamRKSt9nothrow_t") ||
|
||||||
n.equals("_ZnamSt11align_val_tRKSt9nothrow_t") || n.equals("_Znwm") ||
|
n.equals_insensitive("_ZnamSt11align_val_t") ||
|
||||||
n.equals("_ZnwmRKSt9nothrow_t") || n.equals("_ZnwmSt11align_val_t") ||
|
n.equals_insensitive("_ZnamSt11align_val_tRKSt9nothrow_t") ||
|
||||||
n.equals("_ZnwmSt11align_val_tRKSt9nothrow_t")) {
|
n.equals_insensitive("_Znwm") ||
|
||||||
|
n.equals_insensitive("_ZnwmRKSt9nothrow_t") ||
|
||||||
|
n.equals_insensitive("_ZnwmSt11align_val_t") ||
|
||||||
|
n.equals_insensitive("_ZnwmSt11align_val_tRKSt9nothrow_t")) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -329,13 +344,16 @@ class AnalysisPass : public ModulePass {
|
|||||||
// operator delete(void*, std::align_val_t)
|
// operator delete(void*, std::align_val_t)
|
||||||
// operator delete(void*, std::align_val_t, std::nothrow_t const&)
|
// operator delete(void*, std::align_val_t, std::nothrow_t const&)
|
||||||
|
|
||||||
if (n.equals("_ZdaPv") || n.equals("_ZdaPvm") ||
|
if (n.equals_insensitive("_ZdaPv") || n.equals_insensitive("_ZdaPvm") ||
|
||||||
n.equals("_ZdaPvmSt11align_val_t") ||
|
n.equals_insensitive("_ZdaPvmSt11align_val_t") ||
|
||||||
n.equals("_ZdaPvRKSt9nothrow_t") || n.equals("_ZdaPvSt11align_val_t") ||
|
n.equals_insensitive("_ZdaPvRKSt9nothrow_t") ||
|
||||||
n.equals("_ZdaPvSt11align_val_tRKSt9nothrow_t") || n.equals("_ZdlPv") ||
|
n.equals_insensitive("_ZdaPvSt11align_val_t") ||
|
||||||
n.equals("_ZdlPvm") || n.equals("_ZdlPvmSt11align_val_t") ||
|
n.equals_insensitive("_ZdaPvSt11align_val_tRKSt9nothrow_t") ||
|
||||||
n.equals("_ZdlPvRKSt9nothrow_t") || n.equals("_ZdlPvSt11align_val_t") ||
|
n.equals_insensitive("_ZdlPv") || n.equals_insensitive("_ZdlPvm") ||
|
||||||
n.equals("_ZdlPvSt11align_val_tRKSt9nothrow_t")
|
n.equals_insensitive("_ZdlPvmSt11align_val_t") ||
|
||||||
|
n.equals_insensitive("_ZdlPvRKSt9nothrow_t") ||
|
||||||
|
n.equals_insensitive("_ZdlPvSt11align_val_t") ||
|
||||||
|
n.equals_insensitive("_ZdlPvSt11align_val_tRKSt9nothrow_t")
|
||||||
|
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
@ -358,14 +376,14 @@ llvmGetPassPluginInfo() {
|
|||||||
return {LLVM_PLUGIN_API_VERSION, "AnalysisPass", "v0.1",
|
return {LLVM_PLUGIN_API_VERSION, "AnalysisPass", "v0.1",
|
||||||
/* lambda to insert our pass into the pass pipeline. */
|
/* lambda to insert our pass into the pass pipeline. */
|
||||||
[](PassBuilder &PB) {
|
[](PassBuilder &PB) {
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR <= 13
|
|
||||||
using OptimizationLevel = typename PassBuilder::OptimizationLevel;
|
|
||||||
#endif
|
|
||||||
PB.registerOptimizerLastEPCallback(
|
PB.registerOptimizerLastEPCallback(
|
||||||
[](ModulePassManager &MPM, OptimizationLevel OL) {
|
[](ModulePassManager &MPM, OptimizationLevel OL
|
||||||
MPM.addPass(AnalysisPass());
|
#if LLVM_VERSION_MAJOR >= 20
|
||||||
});
|
,
|
||||||
|
ThinOrFullLTOPhase Phase
|
||||||
|
#endif
|
||||||
|
|
||||||
|
) { MPM.addPass(AnalysisPass()); });
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user