inclyc created this revision.
Herald added a reviewer: aaron.ballman.
Herald added a project: All.
inclyc published this revision for review.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Working in D133574 <https://reviews.llvm.org/D133574> we discovered -Wconsumed 
print '' with anonymous
class/struct. After this patch we give a line number, file name of
anonymous struct/class declaration.

Example:

  struct S {
    struct {
      __attribute__((callable_when(consumed))) void func();
    } s;
  };



  local/anoy-consume.cpp:3:20: warning: consumed analysis attribute is attached 
to member of class 'S::(unnamed struct at local/anoy-consume.cpp:2:3)' which 
isn't marked as consumable [-Wconsumed]
      __attribute__((callable_when(consumed))) void func();
                     ^
  1 warning generated.

Link: https://reviews.llvm.org/D133574#3817743
Link: https://godbolt.org/z/16vP3voTW


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D134815

Files:
  clang/docs/ReleaseNotes.rst
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/SemaCXX/warn-consumed-parsing.cpp


Index: clang/test/SemaCXX/warn-consumed-parsing.cpp
===================================================================
--- clang/test/SemaCXX/warn-consumed-parsing.cpp
+++ clang/test/SemaCXX/warn-consumed-parsing.cpp
@@ -62,5 +62,10 @@
       Status {
 };
 
-
-
+class Anonymous {
+  struct /* anonymous */ {
+    void callableWhen()   CALLABLE_WHEN("unconsumed"); // expected-warning-re 
{{consumed analysis attribute is attached to member of class 
'Anonymous::(unnamed struct at {{.*}})' which isn't marked as consumable}}
+    void consumes()       SET_TYPESTATE(consumed); // expected-warning-re 
{{consumed analysis attribute is attached to member of class 
'Anonymous::(unnamed struct at {{.*}})' which isn't marked as consumable}}
+    bool testUnconsumed() TEST_TYPESTATE(consumed); // expected-warning-re 
{{consumed analysis attribute is attached to member of class 
'Anonymous::(unnamed struct at {{.*}})' which isn't marked as consumable}}
+  } anonymous;
+};
Index: clang/lib/Sema/SemaDeclAttr.cpp
===================================================================
--- clang/lib/Sema/SemaDeclAttr.cpp
+++ clang/lib/Sema/SemaDeclAttr.cpp
@@ -1223,7 +1223,8 @@
 
   if (const CXXRecordDecl *RD = ThisType->getAsCXXRecordDecl()) {
     if (!RD->hasAttr<ConsumableAttr>()) {
-      S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class) << RD;
+      S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class)
+          << S.Context.getTagDeclType(RD);
 
       return false;
     }
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -212,6 +212,8 @@
   of FAM-like arrays.
 - Clang now correctly diagnoses a warning when defercencing a void pointer in 
C mode.
   This fixes `Issue 53631 <https://github.com/llvm/llvm-project/issues/53631>`_
+- Clang now prints more readable identifier for anonymous class/struct of
+  ``-Wconsumed``.
 
 Non-comprehensive list of changes in this release
 -------------------------------------------------


Index: clang/test/SemaCXX/warn-consumed-parsing.cpp
===================================================================
--- clang/test/SemaCXX/warn-consumed-parsing.cpp
+++ clang/test/SemaCXX/warn-consumed-parsing.cpp
@@ -62,5 +62,10 @@
       Status {
 };
 
-
-
+class Anonymous {
+  struct /* anonymous */ {
+    void callableWhen()   CALLABLE_WHEN("unconsumed"); // expected-warning-re {{consumed analysis attribute is attached to member of class 'Anonymous::(unnamed struct at {{.*}})' which isn't marked as consumable}}
+    void consumes()       SET_TYPESTATE(consumed); // expected-warning-re {{consumed analysis attribute is attached to member of class 'Anonymous::(unnamed struct at {{.*}})' which isn't marked as consumable}}
+    bool testUnconsumed() TEST_TYPESTATE(consumed); // expected-warning-re {{consumed analysis attribute is attached to member of class 'Anonymous::(unnamed struct at {{.*}})' which isn't marked as consumable}}
+  } anonymous;
+};
Index: clang/lib/Sema/SemaDeclAttr.cpp
===================================================================
--- clang/lib/Sema/SemaDeclAttr.cpp
+++ clang/lib/Sema/SemaDeclAttr.cpp
@@ -1223,7 +1223,8 @@
 
   if (const CXXRecordDecl *RD = ThisType->getAsCXXRecordDecl()) {
     if (!RD->hasAttr<ConsumableAttr>()) {
-      S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class) << RD;
+      S.Diag(AL.getLoc(), diag::warn_attr_on_unconsumable_class)
+          << S.Context.getTagDeclType(RD);
 
       return false;
     }
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -212,6 +212,8 @@
   of FAM-like arrays.
 - Clang now correctly diagnoses a warning when defercencing a void pointer in C mode.
   This fixes `Issue 53631 <https://github.com/llvm/llvm-project/issues/53631>`_
+- Clang now prints more readable identifier for anonymous class/struct of
+  ``-Wconsumed``.
 
 Non-comprehensive list of changes in this release
 -------------------------------------------------
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D134815: [Sema] prin... YingChi Long via Phabricator via cfe-commits

Reply via email to