[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