On Monday, 28 July 2014 at 12:53:20 UTC, John Colvin wrote:
int c;

void foo(int a)
{
   if(a < 0) c++;
   assert(a > 0);
}

I presume that cannot be optimised away entirely to:

void foo(int a) {}

?

sorry, I mean

void foo(int a)
{
    assert(a > 0);
}

of course you can't optimise away the check.

Please guys, you should not change code-gen based on asserts. They are not proofs, they are candidates for formal verification of correctness. They are in essence embedded break-point checks. If you allow asserts to affect codegen then it becomes a very unsafe feature. It's like having a undetected bug in a unit-test introduce bugs in the released program. 8-I

Anyway, without a barrier, you probably could do code motion if you know that you will reach HALT and that is considered illegal. For system programming language reaching HALT should probably be considered legal and you cannot do code motion based on that. In essence, when and where you can move code depends on barriers…

But since you don't actually get HALT from assert() in release mode, it makes no sense to argue the point either…

Reply via email to