forked from OSchip/llvm-project
Don't warn for undefined but used decls that are external because of a typedef.
This fixes pr14736. It is fairly ugly, but I don't think we can do much better as we have to wait at least until the end of the typedef to know if the function will have external linkage or not. llvm-svn: 171240
This commit is contained in:
parent
9dff378a12
commit
9463dce9bf
|
@ -394,6 +394,9 @@ static void checkUndefinedInternals(Sema &S) {
|
|||
// Ignore attributes that have become invalid.
|
||||
if (decl->isInvalidDecl()) continue;
|
||||
|
||||
// If we found out that the decl is external, don't warn.
|
||||
if (decl->getLinkage() == ExternalLinkage) continue;
|
||||
|
||||
// __attribute__((weakref)) is basically a definition.
|
||||
if (decl->hasAttr<WeakRefAttr>()) continue;
|
||||
|
||||
|
|
|
@ -181,3 +181,21 @@ namespace OverloadUse {
|
|||
template<void x(int)> void t(long*) { x(10); } // expected-note {{used here}}
|
||||
void g() { long a; t<f>(&a); }
|
||||
}
|
||||
|
||||
namespace test7 {
|
||||
typedef struct {
|
||||
void bar();
|
||||
void foo() {
|
||||
bar();
|
||||
}
|
||||
} A;
|
||||
}
|
||||
|
||||
namespace test8 {
|
||||
typedef struct {
|
||||
void bar(); // expected-warning {{function 'test8::<anonymous struct>::bar' has internal linkage but is not defined}}
|
||||
void foo() {
|
||||
bar(); // expected-note {{used here}}
|
||||
}
|
||||
} *A;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue