Clang doesn't throw an error about missing return value in block with @try

I just found this today - Clang seems to get confused when a block has @try{} @catch(…){} (Objective-C) statement in a block which has a return value declared, but no return statement actually appears in that block. Example:

int main(int argc, const char * argv[])
{
    id (^iReturnStuff)() = ^id() {
        @try{} @finally{}
    };
    return 0;
}

This shouldn’t compile. But it does. Whenever you remove the @try statement, Clang throws an error as it should. Gcc correctly doesn’t compile this.

What is it about @try{} that gets it confused?