diff --git a/tccgen.c b/tccgen.c index 933f76d3..7ac05d3d 100644 --- a/tccgen.c +++ b/tccgen.c @@ -115,10 +115,13 @@ static Sym *external_sym(int v, CType *type, int r) /* push forward reference */ s = sym_push(v, type, r | VT_CONST | VT_SYM, 0); s->type.t |= VT_EXTERN; - } else { - if (!is_compatible_types(&s->type, type)) - error("incompatible types for redefinition of '%s'", - get_tok_str(v, NULL)); + } else if (s->type.ref == func_old_type.ref) { + s->type.ref = type->ref; + s->r = r | VT_CONST | VT_SYM; + s->type.t |= VT_EXTERN; + } else if (!is_compatible_types(&s->type, type)) { + error("incompatible types for redefinition of '%s'", + get_tok_str(v, NULL)); } return s; }