cproc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/cproc
Log | Files | Refs | Submodules | README | LICENSE

commit 73e7c145e0c5d983cec3be18240851324b818d9f
parent a813137236b2c51de81dff3a869887f1b91cebee
Author: Michael Forney <mforney@mforney.org>
Date:   Wed, 15 May 2019 23:53:12 -0700

decl: extern storage class with initializer is still a definition

Diffstat:
Mdecl.c | 6++----
Atest/extern-initializer.c | 1+
Atest/extern-initializer.qbe | 1+
3 files changed, 4 insertions(+), 4 deletions(-)

diff --git 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 @@ -0,0 +1 @@ +extern int x = 1; diff --git a/test/extern-initializer.qbe b/test/extern-initializer.qbe @@ -0,0 +1 @@ +export data $x = align 4 { w 1, }