[PATCH] D79548: Fix false positive with warning -Wnon-c-typedef-for-linkage
Richard Trieu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 6 22:08:51 PDT 2020
rtrieu created this revision.
rtrieu added a reviewer: rsmith.
Herald added a project: clang.
Fix false positives for -Wnon-c-typedef-for-linkage
Implicit methods for structs can confuse the warning, so exclude checking the Decl's that are implicit. Implicit Decl's for lambdas still need to be checked, so skipping all implicit Decl's won't work.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D79548
Files:
clang/lib/Sema/SemaDecl.cpp
clang/test/SemaCXX/anonymous-struct.cpp
Index: clang/test/SemaCXX/anonymous-struct.cpp
===================================================================
--- clang/test/SemaCXX/anonymous-struct.cpp
+++ clang/test/SemaCXX/anonymous-struct.cpp
@@ -133,3 +133,20 @@
int arr[&f<X> ? 1 : 2];
} C; // expected-note {{by this typedef}}
}
+
+namespace ImplicitDecls {
+ struct Destructor { ~Destructor() {} };
+ typedef struct {} Empty;
+
+ typedef struct {
+ Destructor x;
+ } A;
+
+ typedef struct {
+ Empty E;
+ } B;
+
+ typedef struct {
+ const Empty E;
+ } C;
+}
Index: clang/lib/Sema/SemaDecl.cpp
===================================================================
--- clang/lib/Sema/SemaDecl.cpp
+++ clang/lib/Sema/SemaDecl.cpp
@@ -4425,8 +4425,11 @@
isa<EnumDecl>(D))
continue;
auto *MemberRD = dyn_cast<CXXRecordDecl>(D);
- if (!MemberRD)
+ if (!MemberRD) {
+ if (D->isImplicit())
+ continue;
return {NonCLikeKind::OtherMember, D->getSourceRange()};
+ }
// -- contain a lambda-expression,
if (MemberRD->isLambda())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79548.262536.patch
Type: text/x-patch
Size: 1065 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200507/b7ff2b01/attachment.bin>
More information about the cfe-commits
mailing list