diff options
| -rw-r--r-- | sparse-llvm.c | 8 | ||||
| -rw-r--r-- | validation/backend/extern.c | 11 |
2 files changed, 19 insertions, 0 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index 6b94205d..5bcc7589 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -335,6 +335,14 @@ static LLVMValueRef pseudo_to_value(struct function *fn, struct instruction *ins default: assert(0); } + } else { + const char *name = show_ident(sym->ident); + + result = LLVMGetNamedGlobal(fn->module, name); + if (!result) { + LLVMTypeRef type = symbol_type(fn->module, sym); + result = LLVMAddGlobal(fn->module, type, name); + } } break; } diff --git a/validation/backend/extern.c b/validation/backend/extern.c new file mode 100644 index 00000000..24cbae55 --- /dev/null +++ b/validation/backend/extern.c @@ -0,0 +1,11 @@ +extern unsigned long foo; + +static unsigned long bar(void) +{ + return foo; +} + +/* + * check-name: Extern symbol code generation + * check-command: ./sparsec -c $file -o tmp.o + */ |
