forked from OSchip/llvm-project
Add type attributes to LLVM C API
The LLVM C API is missing type attributes as is needed by attributes such as sret and byval. This patch adds three missing wrapper functions. Bugzilla: https://bugs.llvm.org/show_bug.cgi?id=48249 https://reviews.llvm.org/D97763
This commit is contained in:
parent
4bd2bfb6ec
commit
528f6f7d61
|
@ -604,6 +604,17 @@ unsigned LLVMGetEnumAttributeKind(LLVMAttributeRef A);
|
|||
*/
|
||||
uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A);
|
||||
|
||||
/**
|
||||
* Create a type attribute
|
||||
*/
|
||||
LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID,
|
||||
LLVMTypeRef type_ref);
|
||||
|
||||
/**
|
||||
* Get the type attribute's value.
|
||||
*/
|
||||
LLVMTypeRef LLVMGetTypeAttributeValue(LLVMAttributeRef A);
|
||||
|
||||
/**
|
||||
* Create a string attribute.
|
||||
*/
|
||||
|
@ -626,6 +637,7 @@ const char *LLVMGetStringAttributeValue(LLVMAttributeRef A, unsigned *Length);
|
|||
*/
|
||||
LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A);
|
||||
LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A);
|
||||
LLVMBool LLVMIsTypeAttribute(LLVMAttributeRef A);
|
||||
|
||||
/**
|
||||
* Obtain a Type from a context by its registered name.
|
||||
|
|
|
@ -164,6 +164,18 @@ uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A) {
|
|||
return Attr.getValueAsInt();
|
||||
}
|
||||
|
||||
LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID,
|
||||
LLVMTypeRef type_ref) {
|
||||
auto &Ctx = *unwrap(C);
|
||||
auto AttrKind = (Attribute::AttrKind)KindID;
|
||||
return wrap(Attribute::get(Ctx, AttrKind, unwrap(type_ref)));
|
||||
}
|
||||
|
||||
LLVMTypeRef LLVMGetTypeAttributeValue(LLVMAttributeRef A) {
|
||||
auto Attr = unwrap(A);
|
||||
return wrap(Attr.getValueAsType());
|
||||
}
|
||||
|
||||
LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C,
|
||||
const char *K, unsigned KLength,
|
||||
const char *V, unsigned VLength) {
|
||||
|
@ -194,6 +206,10 @@ LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A) {
|
|||
return unwrap(A).isStringAttribute();
|
||||
}
|
||||
|
||||
LLVMBool LLVMIsTypeAttribute(LLVMAttributeRef A) {
|
||||
return unwrap(A).isTypeAttribute();
|
||||
}
|
||||
|
||||
char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI) {
|
||||
std::string MsgStorage;
|
||||
raw_string_ostream Stream(MsgStorage);
|
||||
|
|
Loading…
Reference in New Issue