hokein created this revision. hokein added a reviewer: sammccall. Herald added a project: clang. hokein requested review of this revision.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D85716 Files: clang/lib/Sema/SemaStmt.cpp clang/test/SemaCXX/recovery-expr-type.cpp Index: clang/test/SemaCXX/recovery-expr-type.cpp =================================================================== --- clang/test/SemaCXX/recovery-expr-type.cpp +++ clang/test/SemaCXX/recovery-expr-type.cpp @@ -75,3 +75,17 @@ template<typename...Ts> U<Ts...>& f(); // expected-error {{pack expansion used as argument for non-pack parameter of alias template}} double &s1 = f(); // expected-error {{no matching function}} } + +namespace test6 { +struct Base { +private: + ~Base(); +}; +struct Derived : Base { // expected-note {{default constructor of}} +}; + +void func() { + // verify that no -Wunused-variable diagnostic on the inner Derived expression. + (Derived(Derived())); // expected-error {{call to implicitly-deleted default constructor}} +} +} Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -350,6 +350,8 @@ E = TE->getSubExpr(); if (isa<CXXTemporaryObjectExpr>(E)) return; + if (isa<RecoveryExpr>(E)) + return; if (const CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E)) if (const CXXRecordDecl *RD = CE->getType()->getAsCXXRecordDecl()) if (!RD->getAttr<WarnUnusedAttr>())
Index: clang/test/SemaCXX/recovery-expr-type.cpp =================================================================== --- clang/test/SemaCXX/recovery-expr-type.cpp +++ clang/test/SemaCXX/recovery-expr-type.cpp @@ -75,3 +75,17 @@ template<typename...Ts> U<Ts...>& f(); // expected-error {{pack expansion used as argument for non-pack parameter of alias template}} double &s1 = f(); // expected-error {{no matching function}} } + +namespace test6 { +struct Base { +private: + ~Base(); +}; +struct Derived : Base { // expected-note {{default constructor of}} +}; + +void func() { + // verify that no -Wunused-variable diagnostic on the inner Derived expression. + (Derived(Derived())); // expected-error {{call to implicitly-deleted default constructor}} +} +} Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -350,6 +350,8 @@ E = TE->getSubExpr(); if (isa<CXXTemporaryObjectExpr>(E)) return; + if (isa<RecoveryExpr>(E)) + return; if (const CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E)) if (const CXXRecordDecl *RD = CE->getType()->getAsCXXRecordDecl()) if (!RD->getAttr<WarnUnusedAttr>())
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits