mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
Deprecate a few C APIs.
This deprecates: * LLVMParseBitcode * LLVMParseBitcodeInContext * LLVMGetBitcodeModuleInContext * LLVMGetBitcodeModule They are replaced with the functions with a 2 suffix which do not record a diagnostic. llvm-svn: 256065
This commit is contained in:
parent
cf9d24ec84
commit
e392243a54
@ -41,7 +41,7 @@ func ParseBitcodeFile(name string) (Module, error) {
|
|||||||
defer C.LLVMDisposeMemoryBuffer(buf)
|
defer C.LLVMDisposeMemoryBuffer(buf)
|
||||||
|
|
||||||
var m Module
|
var m Module
|
||||||
if C.LLVMParseBitcode(buf, &m.C, &errmsg) == 0 {
|
if C.LLVMParseBitcode2(buf, &m.C) == 0 {
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,10 +23,9 @@ void llvm_raise(value Prototype, char *Message);
|
|||||||
/* Llvm.llcontext -> Llvm.llmemorybuffer -> Llvm.llmodule */
|
/* Llvm.llcontext -> Llvm.llmemorybuffer -> Llvm.llmodule */
|
||||||
CAMLprim LLVMModuleRef llvm_get_module(LLVMContextRef C, LLVMMemoryBufferRef MemBuf) {
|
CAMLprim LLVMModuleRef llvm_get_module(LLVMContextRef C, LLVMMemoryBufferRef MemBuf) {
|
||||||
LLVMModuleRef M;
|
LLVMModuleRef M;
|
||||||
char *Message;
|
|
||||||
|
|
||||||
if (LLVMGetBitcodeModuleInContext(C, MemBuf, &M, &Message))
|
if (LLVMGetBitcodeModuleInContext2(C, MemBuf, &M))
|
||||||
llvm_raise(*caml_named_value("Llvm_bitreader.Error"), Message);
|
llvm_raise(*caml_named_value("Llvm_bitreader.Error"), "");
|
||||||
|
|
||||||
return M;
|
return M;
|
||||||
}
|
}
|
||||||
@ -34,10 +33,9 @@ CAMLprim LLVMModuleRef llvm_get_module(LLVMContextRef C, LLVMMemoryBufferRef Mem
|
|||||||
/* Llvm.llcontext -> Llvm.llmemorybuffer -> Llvm.llmodule */
|
/* Llvm.llcontext -> Llvm.llmemorybuffer -> Llvm.llmodule */
|
||||||
CAMLprim LLVMModuleRef llvm_parse_bitcode(LLVMContextRef C, LLVMMemoryBufferRef MemBuf) {
|
CAMLprim LLVMModuleRef llvm_parse_bitcode(LLVMContextRef C, LLVMMemoryBufferRef MemBuf) {
|
||||||
LLVMModuleRef M;
|
LLVMModuleRef M;
|
||||||
char *Message;
|
|
||||||
|
|
||||||
if (LLVMParseBitcodeInContext(C, MemBuf, &M, &Message))
|
if (LLVMParseBitcodeInContext2(C, MemBuf, &M))
|
||||||
llvm_raise(*caml_named_value("Llvm_bitreader.Error"), Message);
|
llvm_raise(*caml_named_value("Llvm_bitreader.Error"), "");
|
||||||
|
|
||||||
return M;
|
return M;
|
||||||
}
|
}
|
||||||
|
@ -16,16 +16,15 @@ lib = get_library()
|
|||||||
def parse_bitcode(mem_buffer):
|
def parse_bitcode(mem_buffer):
|
||||||
"""Input is .core.MemoryBuffer"""
|
"""Input is .core.MemoryBuffer"""
|
||||||
module = c_object_p()
|
module = c_object_p()
|
||||||
out = c_char_p(None)
|
result = lib.LLVMParseBitcode2(mem_buffer, byref(module))
|
||||||
result = lib.LLVMParseBitcode(mem_buffer, byref(module), byref(out))
|
|
||||||
if result:
|
if result:
|
||||||
raise RuntimeError('LLVM Error: %s' % out.value)
|
raise RuntimeError('LLVM Error')
|
||||||
m = Module(module)
|
m = Module(module)
|
||||||
m.take_ownership(mem_buffer)
|
m.take_ownership(mem_buffer)
|
||||||
return m
|
return m
|
||||||
|
|
||||||
def register_library(library):
|
def register_library(library):
|
||||||
library.LLVMParseBitcode.argtypes = [MemoryBuffer, POINTER(c_object_p), POINTER(c_char_p)]
|
library.LLVMParseBitcode2.argtypes = [MemoryBuffer, POINTER(c_object_p)]
|
||||||
library.LLVMParseBitcode.restype = bool
|
library.LLVMParseBitcode2.restype = bool
|
||||||
|
|
||||||
register_library(lib)
|
register_library(lib)
|
||||||
|
@ -49,6 +49,12 @@ Non-comprehensive list of changes in this release
|
|||||||
* Destroys the source instead of only damaging it.
|
* Destroys the source instead of only damaging it.
|
||||||
* Does not record a message. Use the diagnostic handler instead.
|
* Does not record a message. Use the diagnostic handler instead.
|
||||||
|
|
||||||
|
* The C API functions LLVMParseBitcode, LLVMParseBitcodeInContext,
|
||||||
|
LLVMGetBitcodeModuleInContext and LLVMGetBitcodeModule have been deprecated.
|
||||||
|
They will be removed in 3.9. Please migrate to the versions with a 2 suffix.
|
||||||
|
Unlike the old ones the new ones do not record a diagnostic message. Use
|
||||||
|
the diagnostic handler instead.
|
||||||
|
|
||||||
* The deprecated C APIs LLVMGetBitcodeModuleProviderInContext and
|
* The deprecated C APIs LLVMGetBitcodeModuleProviderInContext and
|
||||||
LLVMGetBitcodeModuleProvider have been removed.
|
LLVMGetBitcodeModuleProvider have been removed.
|
||||||
|
|
||||||
|
@ -34,24 +34,46 @@ extern "C" {
|
|||||||
|
|
||||||
/* Builds a module from the bitcode in the specified memory buffer, returning a
|
/* Builds a module from the bitcode in the specified memory buffer, returning a
|
||||||
reference to the module via the OutModule parameter. Returns 0 on success.
|
reference to the module via the OutModule parameter. Returns 0 on success.
|
||||||
Optionally returns a human-readable error message via OutMessage. */
|
Optionally returns a human-readable error message via OutMessage.
|
||||||
|
|
||||||
|
This is deprecated. Use LLVMParseBitcode2. */
|
||||||
LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule,
|
LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule,
|
||||||
char **OutMessage);
|
char **OutMessage);
|
||||||
|
|
||||||
|
/* Builds a module from the bitcode in the specified memory buffer, returning a
|
||||||
|
reference to the module via the OutModule parameter. Returns 0 on success. */
|
||||||
|
LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf,
|
||||||
|
LLVMModuleRef *OutModule);
|
||||||
|
|
||||||
|
/* This is deprecated. Use LLVMParseBitcodeInContext2. */
|
||||||
LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
|
LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
|
||||||
LLVMMemoryBufferRef MemBuf,
|
LLVMMemoryBufferRef MemBuf,
|
||||||
LLVMModuleRef *OutModule, char **OutMessage);
|
LLVMModuleRef *OutModule, char **OutMessage);
|
||||||
|
|
||||||
|
LLVMBool LLVMParseBitcodeInContext2(LLVMContextRef ContextRef,
|
||||||
|
LLVMMemoryBufferRef MemBuf,
|
||||||
|
LLVMModuleRef *OutModule);
|
||||||
|
|
||||||
/** Reads a module from the specified path, returning via the OutMP parameter
|
/** Reads a module from the specified path, returning via the OutMP parameter
|
||||||
a module provider which performs lazy deserialization. Returns 0 on success.
|
a module provider which performs lazy deserialization. Returns 0 on success.
|
||||||
Optionally returns a human-readable error message via OutMessage. */
|
Optionally returns a human-readable error message via OutMessage.
|
||||||
|
This is deprecated. Use LLVMGetBitcodeModuleInContext2. */
|
||||||
LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
|
LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
|
||||||
LLVMMemoryBufferRef MemBuf,
|
LLVMMemoryBufferRef MemBuf,
|
||||||
LLVMModuleRef *OutM, char **OutMessage);
|
LLVMModuleRef *OutM, char **OutMessage);
|
||||||
|
|
||||||
|
/** Reads a module from the specified path, returning via the OutMP parameter a
|
||||||
|
* module provider which performs lazy deserialization. Returns 0 on success. */
|
||||||
|
LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef,
|
||||||
|
LLVMMemoryBufferRef MemBuf,
|
||||||
|
LLVMModuleRef *OutM);
|
||||||
|
|
||||||
|
/* This is deprecated. Use LLVMGetBitcodeModule2. */
|
||||||
LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
||||||
char **OutMessage);
|
char **OutMessage);
|
||||||
|
|
||||||
|
LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
@ -29,6 +29,12 @@ LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule,
|
|||||||
OutMessage);
|
OutMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf,
|
||||||
|
LLVMModuleRef *OutModule) {
|
||||||
|
return LLVMParseBitcodeInContext2(wrap(&getGlobalContext()), MemBuf,
|
||||||
|
OutModule);
|
||||||
|
}
|
||||||
|
|
||||||
static void diagnosticHandler(const DiagnosticInfo &DI, void *C) {
|
static void diagnosticHandler(const DiagnosticInfo &DI, void *C) {
|
||||||
auto *Message = reinterpret_cast<std::string *>(C);
|
auto *Message = reinterpret_cast<std::string *>(C);
|
||||||
raw_string_ostream Stream(*Message);
|
raw_string_ostream Stream(*Message);
|
||||||
@ -64,6 +70,22 @@ LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMBool LLVMParseBitcodeInContext2(LLVMContextRef ContextRef,
|
||||||
|
LLVMMemoryBufferRef MemBuf,
|
||||||
|
LLVMModuleRef *OutModule) {
|
||||||
|
MemoryBufferRef Buf = unwrap(MemBuf)->getMemBufferRef();
|
||||||
|
LLVMContext &Ctx = *unwrap(ContextRef);
|
||||||
|
|
||||||
|
ErrorOr<std::unique_ptr<Module>> ModuleOrErr = parseBitcodeFile(Buf, Ctx);
|
||||||
|
if (ModuleOrErr.getError()) {
|
||||||
|
*OutModule = wrap((Module *)nullptr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*OutModule = wrap(ModuleOrErr.get().release());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Reads a module from the specified path, returning via the OutModule parameter
|
/* Reads a module from the specified path, returning via the OutModule parameter
|
||||||
a module provider which performs lazy deserialization. Returns 0 on success.
|
a module provider which performs lazy deserialization. Returns 0 on success.
|
||||||
Optionally returns a human-readable error message via OutMessage. */
|
Optionally returns a human-readable error message via OutMessage. */
|
||||||
@ -96,8 +118,32 @@ LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef,
|
||||||
|
LLVMMemoryBufferRef MemBuf,
|
||||||
|
LLVMModuleRef *OutM) {
|
||||||
|
LLVMContext &Ctx = *unwrap(ContextRef);
|
||||||
|
std::unique_ptr<MemoryBuffer> Owner(unwrap(MemBuf));
|
||||||
|
|
||||||
|
ErrorOr<std::unique_ptr<Module>> ModuleOrErr =
|
||||||
|
getLazyBitcodeModule(std::move(Owner), Ctx);
|
||||||
|
Owner.release();
|
||||||
|
|
||||||
|
if (ModuleOrErr.getError()) {
|
||||||
|
*OutM = wrap((Module *)nullptr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*OutM = wrap(ModuleOrErr.get().release());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
||||||
char **OutMessage) {
|
char **OutMessage) {
|
||||||
return LLVMGetBitcodeModuleInContext(LLVMGetGlobalContext(), MemBuf, OutM,
|
return LLVMGetBitcodeModuleInContext(LLVMGetGlobalContext(), MemBuf, OutM,
|
||||||
OutMessage);
|
OutMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf,
|
||||||
|
LLVMModuleRef *OutM) {
|
||||||
|
return LLVMGetBitcodeModuleInContext2(LLVMGetGlobalContext(), MemBuf, OutM);
|
||||||
|
}
|
||||||
|
@ -2,3 +2,9 @@
|
|||||||
; RUN: not llvm-c-test --lazy-module-dump < %S/Inputs/invalid.ll.bc 2>&1 | FileCheck %s
|
; RUN: not llvm-c-test --lazy-module-dump < %S/Inputs/invalid.ll.bc 2>&1 | FileCheck %s
|
||||||
|
|
||||||
CHECK: Error parsing bitcode: Unknown attribute kind (52)
|
CHECK: Error parsing bitcode: Unknown attribute kind (52)
|
||||||
|
|
||||||
|
|
||||||
|
; RUN: not llvm-c-test --new-module-dump < %S/Inputs/invalid.ll.bc 2>&1 | FileCheck --check-prefix=NEW %s
|
||||||
|
; RUN: not llvm-c-test --lazy-new-module-dump < %S/Inputs/invalid.ll.bc 2>&1 | FileCheck --check-prefix=NEW %s
|
||||||
|
|
||||||
|
NEW: Error with new bitcode parser: Unknown attribute kind (52)
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
void tokenize_stdin(void (*cb)(char **tokens, int ntokens));
|
void tokenize_stdin(void (*cb)(char **tokens, int ntokens));
|
||||||
|
|
||||||
// module.c
|
// module.c
|
||||||
int module_dump(bool Lazy);
|
int module_dump(bool Lazy, bool New);
|
||||||
int module_list_functions(void);
|
int module_list_functions(void);
|
||||||
int module_list_globals(void);
|
int module_list_globals(void);
|
||||||
|
|
||||||
|
@ -24,6 +24,11 @@ static void print_usage(void) {
|
|||||||
fprintf(stderr, " * --module-dump\n");
|
fprintf(stderr, " * --module-dump\n");
|
||||||
fprintf(stderr, " Read bytecode from stdin - print disassembly\n\n");
|
fprintf(stderr, " Read bytecode from stdin - print disassembly\n\n");
|
||||||
fprintf(stderr, " * --lazy-module-dump\n");
|
fprintf(stderr, " * --lazy-module-dump\n");
|
||||||
|
fprintf(stderr,
|
||||||
|
" Lazily read bytecode from stdin - print disassembly\n\n");
|
||||||
|
fprintf(stderr, " * --new-module-dump\n");
|
||||||
|
fprintf(stderr, " Read bytecode from stdin - print disassembly\n\n");
|
||||||
|
fprintf(stderr, " * --lazy-new-module-dump\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" Lazily read bytecode from stdin - print disassembly\n\n");
|
" Lazily read bytecode from stdin - print disassembly\n\n");
|
||||||
fprintf(stderr, " * --module-list-functions\n");
|
fprintf(stderr, " * --module-list-functions\n");
|
||||||
@ -52,10 +57,14 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
LLVMInitializeCore(pr);
|
LLVMInitializeCore(pr);
|
||||||
|
|
||||||
if (argc == 2 && !strcmp(argv[1], "--lazy-module-dump")) {
|
if (argc == 2 && !strcmp(argv[1], "--lazy-new-module-dump")) {
|
||||||
return module_dump(true);
|
return module_dump(true, true);
|
||||||
|
} else if (argc == 2 && !strcmp(argv[1], "--new-module-dump")) {
|
||||||
|
return module_dump(false, true);
|
||||||
|
} else if (argc == 2 && !strcmp(argv[1], "--lazy-module-dump")) {
|
||||||
|
return module_dump(true, false);
|
||||||
} else if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
|
} else if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
|
||||||
return module_dump(false);
|
return module_dump(false, false);
|
||||||
} else if (argc == 2 && !strcmp(argv[1], "--module-list-functions")) {
|
} else if (argc == 2 && !strcmp(argv[1], "--module-list-functions")) {
|
||||||
return module_list_functions();
|
return module_list_functions();
|
||||||
} else if (argc == 2 && !strcmp(argv[1], "--module-list-globals")) {
|
} else if (argc == 2 && !strcmp(argv[1], "--module-list-globals")) {
|
||||||
|
@ -19,7 +19,14 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
static LLVMModuleRef load_module(bool Lazy) {
|
static void diagnosticHandler(LLVMDiagnosticInfoRef DI, void *C) {
|
||||||
|
char *CErr = LLVMGetDiagInfoDescription(DI);
|
||||||
|
fprintf(stderr, "Error with new bitcode parser: %s\n", CErr);
|
||||||
|
LLVMDisposeMessage(CErr);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static LLVMModuleRef load_module(bool Lazy, bool New) {
|
||||||
LLVMMemoryBufferRef MB;
|
LLVMMemoryBufferRef MB;
|
||||||
LLVMModuleRef M;
|
LLVMModuleRef M;
|
||||||
char *msg = NULL;
|
char *msg = NULL;
|
||||||
@ -30,10 +37,19 @@ static LLVMModuleRef load_module(bool Lazy) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LLVMBool Ret;
|
LLVMBool Ret;
|
||||||
|
if (New) {
|
||||||
|
LLVMContextRef C = LLVMGetGlobalContext();
|
||||||
|
LLVMContextSetDiagnosticHandler(C, diagnosticHandler, NULL);
|
||||||
|
if (Lazy)
|
||||||
|
Ret = LLVMGetBitcodeModule2(MB, &M);
|
||||||
|
else
|
||||||
|
Ret = LLVMParseBitcode2(MB, &M);
|
||||||
|
} else {
|
||||||
if (Lazy)
|
if (Lazy)
|
||||||
Ret = LLVMGetBitcodeModule(MB, &M, &msg);
|
Ret = LLVMGetBitcodeModule(MB, &M, &msg);
|
||||||
else
|
else
|
||||||
Ret = LLVMParseBitcode(MB, &M, &msg);
|
Ret = LLVMParseBitcode(MB, &M, &msg);
|
||||||
|
}
|
||||||
|
|
||||||
if (Ret) {
|
if (Ret) {
|
||||||
fprintf(stderr, "Error parsing bitcode: %s\n", msg);
|
fprintf(stderr, "Error parsing bitcode: %s\n", msg);
|
||||||
@ -47,8 +63,8 @@ static LLVMModuleRef load_module(bool Lazy) {
|
|||||||
return M;
|
return M;
|
||||||
}
|
}
|
||||||
|
|
||||||
int module_dump(bool Lazy) {
|
int module_dump(bool Lazy, bool New) {
|
||||||
LLVMModuleRef M = load_module(Lazy);
|
LLVMModuleRef M = load_module(Lazy, New);
|
||||||
|
|
||||||
char *irstr = LLVMPrintModuleToString(M);
|
char *irstr = LLVMPrintModuleToString(M);
|
||||||
puts(irstr);
|
puts(irstr);
|
||||||
@ -60,7 +76,7 @@ int module_dump(bool Lazy) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int module_list_functions(void) {
|
int module_list_functions(void) {
|
||||||
LLVMModuleRef M = load_module(false);
|
LLVMModuleRef M = load_module(false, false);
|
||||||
LLVMValueRef f;
|
LLVMValueRef f;
|
||||||
|
|
||||||
f = LLVMGetFirstFunction(M);
|
f = LLVMGetFirstFunction(M);
|
||||||
@ -101,7 +117,7 @@ int module_list_functions(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int module_list_globals(void) {
|
int module_list_globals(void) {
|
||||||
LLVMModuleRef M = load_module(false);
|
LLVMModuleRef M = load_module(false, false);
|
||||||
LLVMValueRef g;
|
LLVMValueRef g;
|
||||||
|
|
||||||
g = LLVMGetFirstGlobal(M);
|
g = LLVMGetFirstGlobal(M);
|
||||||
|
Loading…
Reference in New Issue
Block a user