mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 14:50:26 +00:00
This patch fixes https://bugs.llvm.org/show_bug.cgi?id=32352 LLVM code change is as per https://reviews.llvm.org/D33514
llvm-svn: 313389
This commit is contained in:
parent
1be19e6f5b
commit
1dee3be51b
@ -46,6 +46,31 @@ using namespace clang;
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
namespace clang {
|
namespace clang {
|
||||||
|
class BackendConsumer;
|
||||||
|
class ClangDiagnosticHandler final : public DiagnosticHandler {
|
||||||
|
public:
|
||||||
|
ClangDiagnosticHandler(const CodeGenOptions &CGOpts, BackendConsumer *BCon)
|
||||||
|
: CodeGenOpts(CGOpts), BackendCon(BCon) {}
|
||||||
|
|
||||||
|
bool handleDiagnostics(const DiagnosticInfo &DI) override;
|
||||||
|
bool isAnalysisRemarkEnable(const std::string &PassName) {
|
||||||
|
return (CodeGenOpts.OptimizationRemarkAnalysisPattern &&
|
||||||
|
CodeGenOpts.OptimizationRemarkAnalysisPattern->match(PassName));
|
||||||
|
}
|
||||||
|
bool isMissedOptRemarkEnable(const std::string &PassName) {
|
||||||
|
return (CodeGenOpts.OptimizationRemarkMissedPattern &&
|
||||||
|
CodeGenOpts.OptimizationRemarkMissedPattern->match(PassName));
|
||||||
|
}
|
||||||
|
bool isPassedOptRemarkEnable(const std::string &PassName) {
|
||||||
|
return (CodeGenOpts.OptimizationRemarkPattern &&
|
||||||
|
CodeGenOpts.OptimizationRemarkPattern->match(PassName));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const CodeGenOptions &CodeGenOpts;
|
||||||
|
BackendConsumer *BackendCon;
|
||||||
|
};
|
||||||
|
|
||||||
class BackendConsumer : public ASTConsumer {
|
class BackendConsumer : public ASTConsumer {
|
||||||
using LinkModule = CodeGenAction::LinkModule;
|
using LinkModule = CodeGenAction::LinkModule;
|
||||||
|
|
||||||
@ -224,10 +249,10 @@ namespace clang {
|
|||||||
void *OldContext = Ctx.getInlineAsmDiagnosticContext();
|
void *OldContext = Ctx.getInlineAsmDiagnosticContext();
|
||||||
Ctx.setInlineAsmDiagnosticHandler(InlineAsmDiagHandler, this);
|
Ctx.setInlineAsmDiagnosticHandler(InlineAsmDiagHandler, this);
|
||||||
|
|
||||||
LLVMContext::DiagnosticHandlerTy OldDiagnosticHandler =
|
std::unique_ptr<DiagnosticHandler> OldDiagnosticHandler =
|
||||||
Ctx.getDiagnosticHandler();
|
Ctx.getDiagnosticHandler();
|
||||||
void *OldDiagnosticContext = Ctx.getDiagnosticContext();
|
Ctx.setDiagnosticHandler(llvm::make_unique<ClangDiagnosticHandler>(
|
||||||
Ctx.setDiagnosticHandler(DiagnosticHandler, this);
|
CodeGenOpts, this));
|
||||||
Ctx.setDiagnosticsHotnessRequested(CodeGenOpts.DiagnosticsWithHotness);
|
Ctx.setDiagnosticsHotnessRequested(CodeGenOpts.DiagnosticsWithHotness);
|
||||||
if (CodeGenOpts.DiagnosticsHotnessThreshold != 0)
|
if (CodeGenOpts.DiagnosticsHotnessThreshold != 0)
|
||||||
Ctx.setDiagnosticsHotnessThreshold(
|
Ctx.setDiagnosticsHotnessThreshold(
|
||||||
@ -264,7 +289,7 @@ namespace clang {
|
|||||||
|
|
||||||
Ctx.setInlineAsmDiagnosticHandler(OldHandler, OldContext);
|
Ctx.setInlineAsmDiagnosticHandler(OldHandler, OldContext);
|
||||||
|
|
||||||
Ctx.setDiagnosticHandler(OldDiagnosticHandler, OldDiagnosticContext);
|
Ctx.setDiagnosticHandler(std::move(OldDiagnosticHandler));
|
||||||
|
|
||||||
if (OptRecordFile)
|
if (OptRecordFile)
|
||||||
OptRecordFile->keep();
|
OptRecordFile->keep();
|
||||||
@ -299,11 +324,6 @@ namespace clang {
|
|||||||
((BackendConsumer*)Context)->InlineAsmDiagHandler2(SM, Loc);
|
((BackendConsumer*)Context)->InlineAsmDiagHandler2(SM, Loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DiagnosticHandler(const llvm::DiagnosticInfo &DI,
|
|
||||||
void *Context) {
|
|
||||||
((BackendConsumer *)Context)->DiagnosticHandlerImpl(DI);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the best possible source location to represent a diagnostic that
|
/// Get the best possible source location to represent a diagnostic that
|
||||||
/// may have associated debug info.
|
/// may have associated debug info.
|
||||||
const FullSourceLoc
|
const FullSourceLoc
|
||||||
@ -343,6 +363,11 @@ namespace clang {
|
|||||||
void BackendConsumer::anchor() {}
|
void BackendConsumer::anchor() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ClangDiagnosticHandler::handleDiagnostics(const DiagnosticInfo &DI) {
|
||||||
|
BackendCon->DiagnosticHandlerImpl(DI);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// ConvertBackendLocation - Convert a location in a temporary llvm::SourceMgr
|
/// ConvertBackendLocation - Convert a location in a temporary llvm::SourceMgr
|
||||||
/// buffer to be a valid FullSourceLoc.
|
/// buffer to be a valid FullSourceLoc.
|
||||||
static FullSourceLoc ConvertBackendLocation(const llvm::SMDiagnostic &D,
|
static FullSourceLoc ConvertBackendLocation(const llvm::SMDiagnostic &D,
|
||||||
|
Loading…
Reference in New Issue
Block a user