f4a2713ac8
Change-Id: Ia40e9ffdf29b5dab2f122f673ff6802a58bc690f
40 lines
1.6 KiB
C++
40 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) {}
|
|
}
|