aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--decl.c6
-rw-r--r--test/extern-initializer.c1
-rw-r--r--test/extern-initializer.qbe1
3 files changed, 4 insertions, 4 deletions
diff --git a/decl.c b/decl.c
index c231e38..78dc974 100644
--- a/decl.c
+++ b/decl.c
@@ -917,9 +917,7 @@ decl(struct scope *s, struct func *f)
} else {
init = NULL;
}
- if (sc & SCEXTERN)
- break;
- if (init || f) {
+ if (init || d->linkage == LINKNONE) {
if (d->linkage != LINKNONE || sc & SCSTATIC)
emitdata(d, init);
else
@@ -929,7 +927,7 @@ decl(struct scope *s, struct func *f)
d->tentative = false;
listremove(&d->link);
}
- } else if (!d->defined && !d->tentative) {
+ } else if (!(sc & SCEXTERN) && !d->defined && !d->tentative) {
d->tentative = true;
listinsert(tentativedefns.prev, &d->link);
}
diff --git a/test/extern-initializer.c b/test/extern-initializer.c
new file mode 100644
index 0000000..a17c036
--- /dev/null
+++ b/test/extern-initializer.c
@@ -0,0 +1 @@
+extern int x = 1;
diff --git a/test/extern-initializer.qbe b/test/extern-initializer.qbe
new file mode 100644
index 0000000..9814f66
--- /dev/null
+++ b/test/extern-initializer.qbe
@@ -0,0 +1 @@
+export data $x = align 4 { w 1, }