diff --git a/tccgen.c b/tccgen.c index 656d7a5f..ad63fae2 100644 --- a/tccgen.c +++ b/tccgen.c @@ -3278,7 +3278,6 @@ again: dbt_bt = dbt & VT_BTYPE; sbt_bt = sbt & VT_BTYPE; if (dbt_bt == VT_VOID) { - vtop->r = vtop->r2 = VT_CONST; goto done; } if (sbt_bt == VT_VOID) { diff --git a/tests/tests2/143_void_expr.c b/tests/tests2/143_void_expr.c new file mode 100644 index 00000000..3b6a2dd2 --- /dev/null +++ b/tests/tests2/143_void_expr.c @@ -0,0 +1,17 @@ +#include + +static void f(int x) +{ + printf("f(%d)\n", x); +} + +int main(void) +{ + int count = 0, i = 0; + for (; i < 3; ++i) { + printf("%d\n", i); + (void)(i || (f(i), ++count)); + } + printf("count %d\n", count); + return count == 1 ? 0 : 1; +} diff --git a/tests/tests2/143_void_expr.expect b/tests/tests2/143_void_expr.expect new file mode 100644 index 00000000..4f79d1ce --- /dev/null +++ b/tests/tests2/143_void_expr.expect @@ -0,0 +1,5 @@ +0 +f(0) +1 +2 +count 1