summaryrefslogtreecommitdiff
path: root/tools/llvm-c-test
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-12-18 03:57:26 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-12-18 03:57:26 +0000
commit0b270d1d748ae6faeb9e410088b374847bafc7a8 (patch)
treec4feefa921394da0a0b2e2d8f248ea3132d72c87 /tools/llvm-c-test
parent2027fcbfdaea79a5486db80a4da7407f50f7f4ec (diff)
Add a test for LLVMGetBitcodeModule.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255985 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-c-test')
-rw-r--r--tools/llvm-c-test/llvm-c-test.h4
-rw-r--r--tools/llvm-c-test/main.c9
-rw-r--r--tools/llvm-c-test/module.c22
3 files changed, 25 insertions, 10 deletions
diff --git a/tools/llvm-c-test/llvm-c-test.h b/tools/llvm-c-test/llvm-c-test.h
index 1b4976ae142..5f49d702b21 100644
--- a/tools/llvm-c-test/llvm-c-test.h
+++ b/tools/llvm-c-test/llvm-c-test.h
@@ -13,11 +13,13 @@
#ifndef LLVM_C_TEST_H
#define LLVM_C_TEST_H
+#include <stdbool.h>
+
// helpers.c
void tokenize_stdin(void (*cb)(char **tokens, int ntokens));
// module.c
-int module_dump(void);
+int module_dump(bool Lazy);
int module_list_functions(void);
int module_list_globals(void);
diff --git a/tools/llvm-c-test/main.c b/tools/llvm-c-test/main.c
index 59cc749fb15..185ed4c0e04 100644
--- a/tools/llvm-c-test/main.c
+++ b/tools/llvm-c-test/main.c
@@ -23,6 +23,9 @@ static void print_usage(void) {
fprintf(stderr, " Commands:\n");
fprintf(stderr, " * --module-dump\n");
fprintf(stderr, " Read bytecode from stdin - print disassembly\n\n");
+ fprintf(stderr, " * --lazy-module-dump\n");
+ fprintf(stderr,
+ " Lazily read bytecode from stdin - print disassembly\n\n");
fprintf(stderr, " * --module-list-functions\n");
fprintf(stderr,
" Read bytecode from stdin - list summary of functions\n\n");
@@ -49,8 +52,10 @@ int main(int argc, char **argv) {
LLVMInitializeCore(pr);
- if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
- return module_dump();
+ if (argc == 2 && !strcmp(argv[1], "--lazy-module-dump")) {
+ return module_dump(true);
+ } else if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
+ return module_dump(false);
} else if (argc == 2 && !strcmp(argv[1], "--module-list-functions")) {
return module_list_functions();
} else if (argc == 2 && !strcmp(argv[1], "--module-list-globals")) {
diff --git a/tools/llvm-c-test/module.c b/tools/llvm-c-test/module.c
index 2661fc81d88..0f27337eb7c 100644
--- a/tools/llvm-c-test/module.c
+++ b/tools/llvm-c-test/module.c
@@ -19,7 +19,7 @@
#include <stdlib.h>
#include <string.h>
-static LLVMModuleRef load_module(void) {
+static LLVMModuleRef load_module(bool Lazy) {
LLVMMemoryBufferRef MB;
LLVMModuleRef M;
char *msg = NULL;
@@ -29,18 +29,26 @@ static LLVMModuleRef load_module(void) {
exit(1);
}
- if (LLVMParseBitcode(MB, &M, &msg)) {
+ LLVMBool Ret;
+ if (Lazy)
+ Ret = LLVMGetBitcodeModule(MB, &M, &msg);
+ else
+ Ret = LLVMParseBitcode(MB, &M, &msg);
+
+ if (Ret) {
fprintf(stderr, "Error parsing bitcode: %s\n", msg);
LLVMDisposeMemoryBuffer(MB);
exit(1);
}
- LLVMDisposeMemoryBuffer(MB);
+ if (!Lazy)
+ LLVMDisposeMemoryBuffer(MB);
+
return M;
}
-int module_dump(void) {
- LLVMModuleRef M = load_module();
+int module_dump(bool Lazy) {
+ LLVMModuleRef M = load_module(Lazy);
char *irstr = LLVMPrintModuleToString(M);
puts(irstr);
@@ -52,7 +60,7 @@ int module_dump(void) {
}
int module_list_functions(void) {
- LLVMModuleRef M = load_module();
+ LLVMModuleRef M = load_module(false);
LLVMValueRef f;
f = LLVMGetFirstFunction(M);
@@ -93,7 +101,7 @@ int module_list_functions(void) {
}
int module_list_globals(void) {
- LLVMModuleRef M = load_module();
+ LLVMModuleRef M = load_module(false);
LLVMValueRef g;
g = LLVMGetFirstGlobal(M);