On 2014-10-03 19:35:31 +0000, Andrei Alexandrescu said:

Better yet:

        int func() {
                scope(exit)
                        return 1;
                scope(exit)
                        return 2;
                return 0;
        }

2

That should return 1 as the return 1 is the last thing to execute. SDC currently doesn't disallow this and correctly produces 1.

It'll be lowered as such:

int foo2()
{
        try {
                try {
                        return 0;
                } finally {
                        return 2;
                }
        } finally {
                return 1;
        }
}



Worse yet:

        // What does this function do? What *should* it do??
        int func() {
                scope(success)
                        throw new Exception("");
                scope(failure)
                        return 1;
                return 0;
        }

1

This throws an exception, as it's already outside of the scope(failure) block and into the finally for success;

-S

Reply via email to