diff options
author | Lubos Lunak <l.lunak@suse.cz> | 2013-07-21 13:15:58 +0000 |
---|---|---|
committer | Lubos Lunak <l.lunak@suse.cz> | 2013-07-21 13:15:58 +0000 |
commit | 1f490f3aea7ab36f0950f8ca33ec1011e23704e5 (patch) | |
tree | 54f6b458d629395656aab11a796a2a6ba091958e | |
parent | 9cd2435b9a9841255a27a6f6780a125bbd0aeb46 (diff) | |
download | bcm5719-llvm-1f490f3aea7ab36f0950f8ca33ec1011e23704e5.tar.gz bcm5719-llvm-1f490f3aea7ab36f0950f8ca33ec1011e23704e5.zip |
report unused-value warning also for warn_unused types
llvm-svn: 186793
-rw-r--r-- | clang/lib/AST/Expr.cpp | 11 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-unused-value.cpp | 20 |
2 files changed, 30 insertions, 1 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 8473c096afe..5c1a27da365 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -2075,8 +2075,17 @@ bool Expr::isUnusedResultAWarning(const Expr *&WarnE, SourceLocation &Loc, return false; case CXXTemporaryObjectExprClass: - case CXXConstructExprClass: + case CXXConstructExprClass: { + if (const CXXRecordDecl *Type = getType()->getAsCXXRecordDecl()) { + if (Type->hasAttr<WarnUnusedAttr>()) { + WarnE = this; + Loc = getLocStart(); + R1 = getSourceRange(); + return true; + } + } return false; + } case ObjCMessageExprClass: { const ObjCMessageExpr *ME = cast<ObjCMessageExpr>(this); diff --git a/clang/test/SemaCXX/warn-unused-value.cpp b/clang/test/SemaCXX/warn-unused-value.cpp index 072ee60f1f3..5e43d3ec042 100644 --- a/clang/test/SemaCXX/warn-unused-value.cpp +++ b/clang/test/SemaCXX/warn-unused-value.cpp @@ -49,3 +49,23 @@ namespace test2 { } } +namespace test3 { +struct Used { + Used(); + Used(int); + Used(int, int); +}; +struct __attribute__((warn_unused)) Unused { + Unused(); + Unused(int); + Unused(int, int); +}; +void f() { + Used(); + Used(1); + Used(1, 1); + Unused(); // expected-warning {{expression result unused}} + Unused(1); // expected-warning {{expression result unused}} + Unused(1, 1); // expected-warning {{expression result unused}} +} +} |