aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--sparse-llvm.c8
-rw-r--r--validation/backend/extern.c11
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
+ */