1*67e74705SXin Li// RUN: %clang_cc1 %s -fsyntax-only -fblocks -verify -Wno-unreachable-code 2*67e74705SXin Li 3*67e74705SXin Li// rdar://6597252 4*67e74705SXin LiClass test1(Class X) { 5*67e74705SXin Li return 1 ? X : X; 6*67e74705SXin Li} 7*67e74705SXin Li 8*67e74705SXin Li 9*67e74705SXin Li// rdar://6079877 10*67e74705SXin Livoid test2() { 11*67e74705SXin Li id str = @"foo" 12*67e74705SXin Li "bar\0" // no-warning 13*67e74705SXin Li @"baz" " blarg"; 14*67e74705SXin Li id str2 = @"foo" 15*67e74705SXin Li "bar" 16*67e74705SXin Li @"baz" 17*67e74705SXin Li " b\0larg"; // no-warning 18*67e74705SXin Li 19*67e74705SXin Li 20*67e74705SXin Li if (@encode(int) == "foo") { } // expected-warning {{result of comparison against @encode is unspecified}} 21*67e74705SXin Li} 22*67e74705SXin Li 23*67e74705SXin Li#define MAX(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; }) 24*67e74705SXin Livoid (^foo)(int, int) = ^(int x, int y) { int z = MAX(x, y); }; 25*67e74705SXin Li 26*67e74705SXin Li 27*67e74705SXin Li 28*67e74705SXin Li// rdar://8445858 29*67e74705SXin Li@class Object; 30*67e74705SXin Listatic Object *g; 31*67e74705SXin Livoid test3(Object *o) { 32*67e74705SXin Li // this is ok. 33*67e74705SXin Li __sync_bool_compare_and_swap(&g, 0, o); 34*67e74705SXin Li} 35*67e74705SXin Li 36*67e74705SXin Li@class Incomplete_ObjC_class; // expected-note{{forward declaration of class here}} 37*67e74705SXin Listruct Incomplete_struct; // expected-note {{forward declaration}} 38*67e74705SXin Li 39*67e74705SXin Livoid test_encode() { 40*67e74705SXin Li (void)@encode(Incomplete_ObjC_class); // expected-error {{incomplete type}} 41*67e74705SXin Li (void)@encode(struct Incomplete_struct); // expected-error {{incomplete type}} 42*67e74705SXin Li (void)@encode(Incomplete_ObjC_class*); 43*67e74705SXin Li (void)@encode(id); 44*67e74705SXin Li} 45