diff options
Diffstat (limited to 'tools/llvm-c-test/calc.c')
-rw-r--r-- | tools/llvm-c-test/calc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/tools/llvm-c-test/calc.c b/tools/llvm-c-test/calc.c index c34ff7baf0..3119ccf8e9 100644 --- a/tools/llvm-c-test/calc.c +++ b/tools/llvm-c-test/calc.c @@ -44,8 +44,9 @@ static LLVMValueRef build_from_tokens(char **tokens, int ntokens, LLVMValueRef param) { LLVMValueRef stack[MAX_DEPTH]; int depth = 0; + int i; - for (int i = 0; i < ntokens; i++) { + for (i = 0; i < ntokens; i++) { char tok = tokens[i][0]; switch (tok) { case '+': @@ -66,16 +67,19 @@ static LLVMValueRef build_from_tokens(char **tokens, int ntokens, break; - case '@': + case '@': { + LLVMValueRef off; + if (depth < 1) { printf("stack underflow\n"); return NULL; } - LLVMValueRef off = LLVMBuildGEP(builder, param, &stack[depth - 1], 1, ""); + off = LLVMBuildGEP(builder, param, &stack[depth - 1], 1, ""); stack[depth - 1] = LLVMBuildLoad(builder, off, ""); break; + } default: { char *end; @@ -108,6 +112,8 @@ static LLVMValueRef build_from_tokens(char **tokens, int ntokens, static void handle_line(char **tokens, int ntokens) { char *name = tokens[0]; + LLVMValueRef param; + LLVMValueRef res; LLVMModuleRef M = LLVMModuleCreateWithName(name); @@ -119,11 +125,10 @@ static void handle_line(char **tokens, int ntokens) { LLVMBuilderRef builder = LLVMCreateBuilder(); LLVMPositionBuilderAtEnd(builder, LLVMAppendBasicBlock(F, "entry")); - LLVMValueRef param; LLVMGetParams(F, ¶m); LLVMSetValueName(param, "in"); - LLVMValueRef res = build_from_tokens(tokens + 1, ntokens - 1, builder, param); + res = build_from_tokens(tokens + 1, ntokens - 1, builder, param); if (res) { char *irstr = LLVMPrintModuleToString(M); puts(irstr); |