forked from OSchip/llvm-project
Added new functionality to LLVM C API to use DiagnosticInfo to handle errors
Patch by: Darren Powell llvm-svn: 206407
This commit is contained in:
parent
af771c7b2a
commit
1580dc78ae
|
@ -124,6 +124,12 @@ typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
|
|||
* @see llvm::Use */
|
||||
typedef struct LLVMOpaqueUse *LLVMUseRef;
|
||||
|
||||
|
||||
/**
|
||||
* @see llvm::DiagnosticInfo
|
||||
*/
|
||||
typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
|
||||
|
||||
typedef enum {
|
||||
LLVMZExtAttribute = 1<<0,
|
||||
LLVMSExtAttribute = 1<<1,
|
||||
|
@ -400,6 +406,13 @@ typedef enum {
|
|||
the old one */
|
||||
} LLVMAtomicRMWBinOp;
|
||||
|
||||
typedef enum {
|
||||
LLVMDSError,
|
||||
LLVMDSWarning,
|
||||
LLVMDSRemark,
|
||||
LLVMDSNote
|
||||
} LLVMDiagnosticSeverity;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
@ -453,6 +466,8 @@ void LLVMEnablePrettyStackTrace(void);
|
|||
* @{
|
||||
*/
|
||||
|
||||
typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
|
||||
|
||||
/**
|
||||
* Create a new context.
|
||||
*
|
||||
|
@ -466,6 +481,13 @@ LLVMContextRef LLVMContextCreate(void);
|
|||
*/
|
||||
LLVMContextRef LLVMGetGlobalContext(void);
|
||||
|
||||
/**
|
||||
* Set the diagnostic handler for this context.
|
||||
*/
|
||||
void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
|
||||
LLVMDiagnosticHandler Handler,
|
||||
void *DiagnosticContext);
|
||||
|
||||
/**
|
||||
* Destroy a context instance.
|
||||
*
|
||||
|
@ -474,6 +496,21 @@ LLVMContextRef LLVMGetGlobalContext(void);
|
|||
*/
|
||||
void LLVMContextDispose(LLVMContextRef C);
|
||||
|
||||
/**
|
||||
* Return a string representation of the DiagnosticInfo. Use
|
||||
* LLVMDisposeMessage to free the string.
|
||||
*
|
||||
* @see DiagnosticInfo::print()
|
||||
*/
|
||||
char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
|
||||
|
||||
/**
|
||||
* Return an enum LLVMDiagnosticSeverity.
|
||||
*
|
||||
* @see DiagnosticInfo::getSeverity()
|
||||
*/
|
||||
LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
|
||||
|
||||
unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
|
||||
unsigned SLen);
|
||||
unsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#ifndef LLVM_SUPPORT_DIAGNOSTICINFO_H
|
||||
#define LLVM_SUPPORT_DIAGNOSTICINFO_H
|
||||
|
||||
#include "llvm-c/Core.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
|
||||
|
@ -294,6 +295,9 @@ private:
|
|||
const Twine &Msg;
|
||||
};
|
||||
|
||||
// Create wrappers for C Binding types (see CBindingWrapping.h).
|
||||
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DiagnosticInfo, LLVMDiagnosticInfoRef)
|
||||
|
||||
} // End namespace llvm
|
||||
|
||||
#endif
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#include "llvm/IR/Attributes.h"
|
||||
#include "llvm/IR/CallSite.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DiagnosticInfo.h"
|
||||
#include "llvm/IR/DiagnosticPrinter.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/GlobalAlias.h"
|
||||
#include "llvm/IR/GlobalVariable.h"
|
||||
|
@ -76,6 +78,14 @@ LLVMContextRef LLVMGetGlobalContext() {
|
|||
return wrap(&getGlobalContext());
|
||||
}
|
||||
|
||||
void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
|
||||
LLVMDiagnosticHandler Handler,
|
||||
void *DiagnosticContext) {
|
||||
unwrap(C)->setDiagnosticHandler(
|
||||
LLVM_EXTENSION reinterpret_cast<LLVMContext::DiagnosticHandlerTy>(Handler),
|
||||
DiagnosticContext);
|
||||
}
|
||||
|
||||
void LLVMContextDispose(LLVMContextRef C) {
|
||||
delete unwrap(C);
|
||||
}
|
||||
|
@ -89,6 +99,40 @@ unsigned LLVMGetMDKindID(const char* Name, unsigned SLen) {
|
|||
return LLVMGetMDKindIDInContext(LLVMGetGlobalContext(), Name, SLen);
|
||||
}
|
||||
|
||||
char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI) {
|
||||
std::string MsgStorage;
|
||||
raw_string_ostream Stream(MsgStorage);
|
||||
DiagnosticPrinterRawOStream DP(Stream);
|
||||
|
||||
unwrap(DI)->print(DP);
|
||||
Stream.flush();
|
||||
|
||||
return LLVMCreateMessage(MsgStorage.c_str());
|
||||
}
|
||||
|
||||
LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI){
|
||||
LLVMDiagnosticSeverity severity;
|
||||
|
||||
switch(unwrap(DI)->getSeverity()) {
|
||||
default:
|
||||
severity = LLVMDSError;
|
||||
break;
|
||||
case DS_Warning:
|
||||
severity = LLVMDSWarning;
|
||||
break;
|
||||
case DS_Remark:
|
||||
severity = LLVMDSRemark;
|
||||
break;
|
||||
case DS_Note:
|
||||
severity = LLVMDSNote;
|
||||
break;
|
||||
}
|
||||
|
||||
return severity;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*===-- Operations on modules ---------------------------------------------===*/
|
||||
|
||||
|
|
Loading…
Reference in New Issue