[cfe-commits] r167873 - in /cfe/trunk: lib/Sema/SemaDecl.cpp test/SemaCXX/warn-unused-result.cpp
Kaelyn Uhrain
rikka at google.com
Tue Nov 13 13:23:31 PST 2012
Author: rikka
Date: Tue Nov 13 15:23:31 2012
New Revision: 167873
URL: http://llvm.org/viewvc/llvm-project?rev=167873&view=rev
Log:
For classes that have the warn_unused_result attribute, don't apply the
attribute to the class' methods even when they return an instance of the
class (e.g. assignment operators).
Modified:
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/test/SemaCXX/warn-unused-result.cpp
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=167873&r1=167872&r2=167873&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Nov 13 15:23:31 2012
@@ -5696,7 +5696,11 @@
RetType->getAsCXXRecordDecl() : RetType->getPointeeCXXRecordDecl();
if (!NewFD->isInvalidDecl() && !NewFD->hasAttr<WarnUnusedResultAttr>() &&
Ret && Ret->hasAttr<WarnUnusedResultAttr>()) {
- NewFD->addAttr(new (Context) WarnUnusedResultAttr(SourceRange(), Context));
+ const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewFD);
+ if (!(MD && MD->getCorrespondingMethodInClass(Ret, true))) {
+ NewFD->addAttr(new (Context) WarnUnusedResultAttr(SourceRange(),
+ Context));
+ }
}
if (!getLangOpts().CPlusPlus) {
Modified: cfe/trunk/test/SemaCXX/warn-unused-result.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unused-result.cpp?rev=167873&r1=167872&r2=167873&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-unused-result.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn-unused-result.cpp Tue Nov 13 15:23:31 2012
@@ -46,6 +46,12 @@
namespace warn_unused_CXX11 {
struct [[clang::warn_unused_result]] Status {
bool ok() const;
+ Status& operator=(const Status& x);
+ inline void Update(const Status& new_status) {
+ if (ok()) {
+ *this = new_status; //no-warning
+ }
+ }
};
Status DoSomething();
Status& DoSomethingElse();
More information about the cfe-commits
mailing list