diff options
| author | Nico Weber <nicolasweber@gmx.de> | 2014-11-12 03:52:25 +0000 |
|---|---|---|
| committer | Nico Weber <nicolasweber@gmx.de> | 2014-11-12 03:52:25 +0000 |
| commit | 28309185b28034edc1b54c4e2a01c399f5097f28 (patch) | |
| tree | d35334799de7cf1ba0fd80b563f0245c93aa2fa0 /clang | |
| parent | aa0117c628d8e3ccd0a3c055d8faaa01768389af (diff) | |
| download | bcm5719-llvm-28309185b28034edc1b54c4e2a01c399f5097f28.tar.gz bcm5719-llvm-28309185b28034edc1b54c4e2a01c399f5097f28.zip | |
Mark TypeDecls used in member initializers as referenced.
Without this, -Wunused-local-typedef would incorrectly warn on the two typedefs
in this program:
void foo() {
struct A {};
struct B : public A {
typedef A INHERITED;
B() : INHERITED() {}
typedef B SELF;
B(int) : SELF() {}
};
}
llvm-svn: 221765
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 1 | ||||
| -rw-r--r-- | clang/test/SemaCXX/warn-unused-local-typedef.cpp | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index f9f9d3ff94e..d4cb2fe3504 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2914,6 +2914,7 @@ Sema::BuildMemInitializer(Decl *ConstructorD, if (BaseType.isNull()) { BaseType = Context.getTypeDeclType(TyD); + MarkAnyDeclReferenced(TyD->getLocation(), TyD, /*OdrUse=*/false); if (SS.isSet()) // FIXME: preserve source range information BaseType = Context.getElaboratedType(ETK_None, SS.getScopeRep(), diff --git a/clang/test/SemaCXX/warn-unused-local-typedef.cpp b/clang/test/SemaCXX/warn-unused-local-typedef.cpp index e4434276721..1ef0ebfe1ac 100644 --- a/clang/test/SemaCXX/warn-unused-local-typedef.cpp +++ b/clang/test/SemaCXX/warn-unused-local-typedef.cpp @@ -213,5 +213,17 @@ void sneaky_memfun_h() { sneaky_memfun_g(sneaky_memfun()); } +void typedefs_in_constructors() { + struct A {}; + struct B : public A { + // Neither of these two should warn: + typedef A INHERITED; + B() : INHERITED() {} + + typedef B SELF; + B(int) : SELF() {} + }; +} + // This should not disable any warnings: #pragma clang diagnostic ignored "-Wunused-local-typedef" |

