From 6fd4e5bace73a260ab45a12f5588aa7bd3431f49 Mon Sep 17 00:00:00 2001 From: seyko Date: Tue, 3 Mar 2015 15:39:57 +0300 Subject: [PATCH] a void to void cast. Allow tcc to compile the following program /////// void func1() {} void func2() { return func1(); } ////// gcc accepts this program --- tccgen.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tccgen.c b/tccgen.c index 5556f85b..6432ebbc 100644 --- a/tccgen.c +++ b/tccgen.c @@ -2412,8 +2412,20 @@ static void gen_assign_cast(CType *dt) st = &vtop->type; /* source type */ dbt = dt->t & VT_BTYPE; sbt = st->t & VT_BTYPE; - if (sbt == VT_VOID || dbt == VT_VOID) - tcc_error("cannot cast from/to void"); + if (sbt == VT_VOID || dbt == VT_VOID) { + if (sbt == VT_VOID && dbt == VT_VOID) + ; /* + It is Ok if both are void + A test program: + void func1() {} + void func2() { + return func1(); + } + gcc accepts this program + */ + else + tcc_error("cannot cast from/to void"); + } if (dt->t & VT_CONSTANT) tcc_warning("assignment of read-only location"); switch(dbt) { -- 2.11.4.GIT