ref: 46ff41bc9e13600e602de27f04695e17bacac390
parent: efda45c11a438f0a83f57f55b34abb812f32cd53
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Fri Nov 5 02:38:46 EDT 2021
cc2/qbe: Use common symbols for tentative declarations Common symbols allow multiple tentative definitions in different symbols, which is a common extension of the C language, specially in UNIX where C was born.
--- a/src/cmd/cc/cc2/target/qbe/code.c
+++ b/src/cmd/cc/cc2/target/qbe/code.c
@@ -287,10 +287,13 @@
return;
if (sym->kind == SGLOB)
fputs("export ", stdout);
- printf("data %s = align %d {\n", symname(sym), tp->align);
- if (sym->type.flags & INITF)
- return;
- printf("\tz\t%lu\n}\n", tp->size);
+
+ printf("data %s = %s align %d {\n",
+ symname(sym),
+ (tp->flags & INITF) ? "" : "common",
+ tp->align);
+ if ((tp->flags & INITF) == 0)
+ printf("\tz\t%lu\n}\n", tp->size);
}
void