Skip to content
Snippets Groups Projects
Commit 9f409549 authored by Rafael Espindola's avatar Rafael Espindola
Browse files

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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171240 91177308-0d34-0410-b5e6-96231b3b80d8
parent 07cf58c9
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment