From 73e7c145e0c5d983cec3be18240851324b818d9f Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Wed, 15 May 2019 23:53:12 -0700 Subject: decl: extern storage class with initializer is still a definition --- decl.c | 6 ++---- test/extern-initializer.c | 1 + test/extern-initializer.qbe | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 test/extern-initializer.c create mode 100644 test/extern-initializer.qbe 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, } -- cgit v1.2.3