// RUN: clang-cc -emit-llvm -triple=i686-apple-darwin9 -o %t %s -O2 // RUN: grep 'ret i32' %t | count 1 // RUN: grep 'ret i32 1' %t | count 1 @interface MyClass { } - (void)method; @end @implementation MyClass - (void)method { @synchronized(self) { } } @end void foo(id a) { @synchronized(a) { return; } } int f0(id a) { int x = 0; @synchronized((x++, a)) { } return x; // ret i32 1 } void f1(id a) { // The trick here is that the return shouldn't go through clean up, // but there isn't a simple way to check this property. @synchronized(({ return; }), a) { return; } }