llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Younan Zhang (zyn0217) <details> <summary>Changes</summary> Those OVE might be allocated on stack and we have already tracked their types for diagnostics. So let's leave them null. --- Full diff: https://github.com/llvm/llvm-project/pull/238243.diff 4 Files Affected: - (modified) clang/include/clang/Sema/Overload.h (+2-6) - (modified) clang/lib/Sema/SemaInit.cpp (+5-7) - (modified) clang/lib/Sema/SemaOverload.cpp (+3-6) - (modified) clang/test/SemaCXX/type-traits-unsatisfied-diags.cpp (+1-1) ``````````diff diff --git a/clang/include/clang/Sema/Overload.h b/clang/include/clang/Sema/Overload.h index f280c6ffa5a810..b5a86c68ddfe5d 100644 --- a/clang/include/clang/Sema/Overload.h +++ b/clang/include/clang/Sema/Overload.h @@ -597,7 +597,8 @@ class Sema; public: void init(FailureKind K, Expr *From, QualType To) { init(K, From->getType(), To); - FromExpr = From; + if (!isa<OpaqueValueExpr>(From)) + FromExpr = From; } void init(FailureKind K, QualType From, QualType To) { @@ -610,11 +611,6 @@ class Sema; QualType getFromType() const { return QualType::getFromOpaquePtr(FromTy); } QualType getToType() const { return QualType::getFromOpaquePtr(ToTy); } - void setFromExpr(Expr *E) { - FromExpr = E; - setFromType(E->getType()); - } - void setFromType(QualType T) { FromTy = T.getAsOpaquePtr(); } void setToType(QualType T) { ToTy = T.getAsOpaquePtr(); } }; diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 1cea790da1d27f..8b0c2cf5dbc856 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -4399,13 +4399,11 @@ static void TryArrayCopy(Sema &S, const InitializationKind &Kind, QualType InitEltT = S.Context.getAsArrayType(Initializer->getType())->getElementType(); - // FIXME: Here's a functional memory leak cuz we don't have a temporary - // allocator at the moment - OpaqueValueExpr *OVE = new (S.Context) OpaqueValueExpr( - Initializer->getExprLoc(), InitEltT, Initializer->getValueKind(), - Initializer->getObjectKind()); - Expr *OVEAsExpr = OVE; - Sequence.InitializeFrom(S, Element, Kind, OVEAsExpr, + OpaqueValueExpr OVE(Initializer->getExprLoc(), InitEltT, + Initializer->getValueKind(), + Initializer->getObjectKind()); + Expr *OVEPtr = &OVE; + Sequence.InitializeFrom(S, Element, Kind, OVEPtr, /*TopLevelOfInitList*/ false, TreatUnavailableAsInvalid); if (Sequence) diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 62b6ad8ffb5644..c98446703b9c04 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -6208,12 +6208,9 @@ static ImplicitConversionSequence TryObjectArgumentInitialization( ExplicitParameterType = Method->getFunctionObjectParameterReferenceType(); OpaqueValueExpr TmpExpr(Loc, FromType.getNonReferenceType(), ValueKindFromClassification(FromClassification)); - ImplicitConversionSequence ICS = TryCopyInitialization( - S, &TmpExpr, ExplicitParameterType, SuppressUserConversion, - /*InOverloadResolution=*/true, false); - if (ICS.isBad()) - ICS.Bad.FromExpr = nullptr; - return ICS; + return TryCopyInitialization(S, &TmpExpr, ExplicitParameterType, + SuppressUserConversion, + /*InOverloadResolution=*/true, false); } assert(FromType->isRecordType()); diff --git a/clang/test/SemaCXX/type-traits-unsatisfied-diags.cpp b/clang/test/SemaCXX/type-traits-unsatisfied-diags.cpp index 3bde5b06a3aba4..2fa337fd7bafbb 100644 --- a/clang/test/SemaCXX/type-traits-unsatisfied-diags.cpp +++ b/clang/test/SemaCXX/type-traits-unsatisfied-diags.cpp @@ -339,7 +339,7 @@ static_assert(__is_constructible(S1, char*)); // expected-error@-1 {{no matching constructor for initialization of 'S1'}} \ // expected-note@#c-S1 {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'char *' to 'const S1' for 1st argument}} \ // expected-note@#c-S1 {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'char *' to 'S1' for 1st argument}} \ -// expected-note@#cc-S1 {{candidate constructor not viable: no known conversion from 'char *' to 'int' for 1st argument; dereference the argument with *}} \ +// expected-note@#cc-S1 {{candidate constructor not viable: no known conversion from 'char *' to 'int' for 1st argument}} \ // expected-note@#c-S1 {{'S1' defined here}} struct S2 { // #c-S2 `````````` </details> https://github.com/llvm/llvm-project/pull/238243 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
