From: Lubos Lunak Date: Sun, 21 Jul 2013 13:15:58 +0000 (+0000) Subject: report unused-value warning also for warn_unused types X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81e4549fede62835235a53c024909c3fab6b73ac;p=clang report unused-value warning also for warn_unused types git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186793 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 8473c096af..5c1a27da36 100644 --- a/lib/AST/Expr.cpp +++ b/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()) { + WarnE = this; + Loc = getLocStart(); + R1 = getSourceRange(); + return true; + } + } return false; + } case ObjCMessageExprClass: { const ObjCMessageExpr *ME = cast(this); diff --git a/test/SemaCXX/warn-unused-value.cpp b/test/SemaCXX/warn-unused-value.cpp index 072ee60f1f..5e43d3ec04 100644 --- a/test/SemaCXX/warn-unused-value.cpp +++ b/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}} +} +}