From 94ac9f2b4952fbd77bfdf39e753fcbca3e472883 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Sun, 7 May 2017 08:10:06 +0200 Subject: Accept extern initialized file-scope variables 'extern int i = 42;' at file scope (but not in function scope!) is allowed and is a proper definition, even though questionable style; some compilers warn about this. --- tccgen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tccgen.c') diff --git a/tccgen.c b/tccgen.c index 1fe5e93..424c4e0 100644 --- a/tccgen.c +++ b/tccgen.c @@ -6955,7 +6955,8 @@ found: has_init = (tok == '='); if (has_init && (type.t & VT_VLA)) tcc_error("variable length array cannot be initialized"); - if ((type.t & VT_EXTERN) || ((type.t & VT_BTYPE) == VT_FUNC) || + if (((type.t & VT_EXTERN) && (!has_init || l != VT_CONST)) || + ((type.t & VT_BTYPE) == VT_FUNC) || ((type.t & VT_ARRAY) && (type.t & VT_STATIC) && !has_init && l == VT_CONST && type.ref->c < 0)) { /* external variable or function */ -- cgit v1.3.1