[PATCH] D55949: Correctly handle function pointers returning a type marked nodiscard

Erik Pilkington via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 20 14:13:08 PST 2018

erik.pilkington accepted this revision.
erik.pilkington added a comment.
This revision is now accepted and ready to land.


Comment at: lib/AST/Expr.cpp:2281-2286
+      // If there is no FunctionDecl for the call, check the return type of the
+      // callee to see if it was declared with the WarnUnusedResult attribute.
+      if (!Func && !HasWarnUnusedResultAttr) {
+        if (const TagDecl *TD = CE->getCallReturnType(Ctx)->getAsTagDecl())
+          HasWarnUnusedResultAttr = TD->hasAttr<WarnUnusedResultAttr>();
+      }
This duplicates some logic from FunctionDecl::hasUnusedResultAttr(), maybe we should move that member function to the CallExpr?

Comment at: test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:51
+  one(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  two(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
This diagnostic should also probably be improved at some point, the function wasn't declared 'nodiscard', the type was.



More information about the cfe-commits mailing list