diff --git a/riscv64-gen.c b/riscv64-gen.c index beb0a46c..baf7f5ee 100644 --- a/riscv64-gen.c +++ b/riscv64-gen.c @@ -999,7 +999,7 @@ static void gen_opil(int op, int ll) ++fc; case TOK_LT: func3 = 2; goto do_cop; // slti d, a, fc case TOK_ULE: - if (fc >= (1 << 11) - 1) + if (fc >= (1 << 11) - 1 || fc == -1) break; ++fc; case TOK_ULT: func3 = 3; goto do_cop; // sltiu d, a, fc diff --git a/tests/tcctest.c b/tests/tcctest.c index 921b0eba..027a8856 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -463,6 +463,15 @@ void if2t(void) printf("if2t:ok3\n"); } +void if3t(void) +{ + volatile long long i = 1; + if (i <= 18446744073709551615ULL) + ; + else + printf ("if3t:wrong 1\n"); +} + void if_test(void) { if1t(1, 0, 0, 0); @@ -470,6 +479,7 @@ void if_test(void) if1t(3, 2, 0, 0); if1t(4, 2, 3, 0); if2t(); + if3t(); } void loop_test()