diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -2658,6 +2658,8 @@ // Otherwise, the result of the cast is unused. if (CE->getCastKind() == CK_ConstructorConversion) return CE->getSubExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + if (CE->getCastKind() == CK_Dependent) + return false; WarnE = this; if (const CXXFunctionalCastExpr *CXXCE = diff --git a/clang/test/SemaCXX/recovery-expr-type.cpp b/clang/test/SemaCXX/recovery-expr-type.cpp --- a/clang/test/SemaCXX/recovery-expr-type.cpp +++ b/clang/test/SemaCXX/recovery-expr-type.cpp @@ -75,3 +75,17 @@ template U& 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-value diagnostic. + (Derived(Derived())); // expected-error {{call to implicitly-deleted default constructor}} +} +}