// RUN: %clang_cc1 -x c++ -fsyntax-only -verify %s -fblocks
int(*FP)();
int(^IFP)();
int(^II)(int);
intmain(){
int(*FPL)(int)=FP;// expected-error {{cannot initialize a variable of type 'int (*)(int)' with an lvalue of type 'int (*)()'}}
// For Blocks, the ASTContext::typesAreBlockCompatible() makes sure this is an error.
int(^PFR)(int)=IFP;// expected-error {{cannot initialize a variable of type 'int (^)(int)' with an lvalue of type 'int (^)()'}}
PFR=II;// OK
constint(^CIC)()=IFP;// OK - initializing 'const int (^)()' with an expression of type 'int (^)()'}}
constint(^CICC)()=CIC;
int*const(^IPCC)()=0;
int*const(^IPCC1)()=IPCC;
int*(^IPCC2)()=IPCC;// expected-error {{cannot initialize a variable of type 'int *(^)()' with an lvalue of type 'int *const (^)()'}}
int(^IPCC3)(constint)=PFR;
int(^IPCC4)(int,char(^CArg)(double));
int(^IPCC5)(int,char(^CArg)(double))=IPCC4;
int(^IPCC6)(int,char(^CArg)(float))=IPCC4;// expected-error {{cannot initialize a variable of type 'int (^)(int, char (^)(float))' with an lvalue of type}}