51 lines
991 B
C
51 lines
991 B
C
|
// RUN: clang -fsyntax-only -verify %s
|
||
|
void donotwarn();
|
||
|
|
||
|
int (^IFP) ();
|
||
|
int (^II) (int);
|
||
|
int test1() {
|
||
|
int (^PFR) (int) = 0; // OK
|
||
|
PFR = II; // OK
|
||
|
|
||
|
if (PFR == II) // OK
|
||
|
donotwarn();
|
||
|
|
||
|
if (PFR == IFP) // expected-error {{comparison of distinct block types}}
|
||
|
donotwarn();
|
||
|
|
||
|
if (PFR == (int (^) (int))IFP) // OK
|
||
|
donotwarn();
|
||
|
|
||
|
if (PFR == 0) // OK
|
||
|
donotwarn();
|
||
|
|
||
|
if (PFR) // OK
|
||
|
donotwarn();
|
||
|
|
||
|
if (!PFR) // OK
|
||
|
donotwarn();
|
||
|
|
||
|
return PFR != IFP; // expected-error {{comparison of distinct block types}}
|
||
|
}
|
||
|
|
||
|
int test2(double (^S)()) {
|
||
|
double (^I)(int) = (void*) S;
|
||
|
(void*)I = (void *)S; // expected-error {{expression is not assignable}}
|
||
|
|
||
|
void *pv = I;
|
||
|
|
||
|
pv = S;
|
||
|
|
||
|
I(1);
|
||
|
|
||
|
return (void*)I == (void *)S;
|
||
|
}
|
||
|
|
||
|
int^ x; // expected-error {{block pointer to non-function type is invalid}}
|
||
|
int^^ x1; // expected-error {{block pointer to non-function type is invalid}}
|
||
|
|
||
|
int test3() {
|
||
|
char *^ y; // expected-error {{block pointer to non-function type is invalid}}
|
||
|
}
|
||
|
|