41 lines
1.6 KiB
C++
41 lines
1.6 KiB
C++
|
// RUN: %clang_cc1 -x c++ -verify -fsyntax-only %s
|
||
|
|
||
|
void f1();
|
||
|
|
||
|
struct S {
|
||
|
static void f2();
|
||
|
};
|
||
|
|
||
|
extern void f3() __attribute__((weak_import));
|
||
|
|
||
|
struct S2 {
|
||
|
static void f4() __attribute__((weak_import));
|
||
|
};
|
||
|
|
||
|
bool f5();
|
||
|
bool f6(int);
|
||
|
|
||
|
void bar() {
|
||
|
bool b;
|
||
|
|
||
|
b = f1; // expected-warning {{address of function 'f1' will always evaluate to 'true'}} \
|
||
|
expected-note {{prefix with the address-of operator to silence this warning}}
|
||
|
if (f1) {} // expected-warning {{address of function 'f1' will always evaluate to 'true'}} \
|
||
|
expected-note {{prefix with the address-of operator to silence this warning}}
|
||
|
b = S::f2; // expected-warning {{address of function 'S::f2' will always evaluate to 'true'}} \
|
||
|
expected-note {{prefix with the address-of operator to silence this warning}}
|
||
|
if (S::f2) {} // expected-warning {{address of function 'S::f2' will always evaluate to 'true'}} \
|
||
|
expected-note {{prefix with the address-of operator to silence this warning}}
|
||
|
b = f5; // expected-warning {{address of function 'f5' will always evaluate to 'true'}} \
|
||
|
expected-note {{prefix with the address-of operator to silence this warning}} \
|
||
|
expected-note {{suffix with parentheses to turn this into a function call}}
|
||
|
b = f6; // expected-warning {{address of function 'f6' will always evaluate to 'true'}} \
|
||
|
expected-note {{prefix with the address-of operator to silence this warning}}
|
||
|
|
||
|
// implicit casts of weakly imported symbols are ok:
|
||
|
b = f3;
|
||
|
if (f3) {}
|
||
|
b = S2::f4;
|
||
|
if (S2::f4) {}
|
||
|
}
|