rsmith added inline comments.
================ Comment at: clang/lib/Sema/SemaOverload.cpp:4989 + if (ToType->isArrayType() && ToType->isCharType() && + isa<StringLiteral>(From->getInit(0))) { InitializedEntity Entity = ---------------- Mordante wrote: > rsmith wrote: > > This is too narrow a check in two ways: we should allow parenthesized > > string literals here, and we should allow `ObjCEncodeExpr`. > Actually it seems the code isn't behaving properly at all. It seems the > conversion is done by > https://github.com/llvm/llvm-project/blob/master/clang/lib/Sema/SemaOverload.cpp#L5174 > resulting in an array-to-pointer conversion instead of an identity conversion. > > It can solve it by manually removing the decay like: > ``` > if (const auto *DT = dyn_cast<DecayedType>(ToType)) > if (const auto *AT = S.Context.getAsArrayType(DT->getOriginalType())) > if (S.IsStringInit(From->getInit(0), AT) { > ... > ``` > This code works and results in an identity conversion. But it feels a bit odd > to manually peel away the array-to-pointer decay. Is this the best solution > or do you have a better suggestions? > > I think this is a bug in your testcases. I'll comment below. ================ Comment at: clang/test/CXX/drs/dr14xx.cpp:411-414 + void f(const char[4]); + void f(const wchar_t[4]); + void f(const char16_t[4]); + void f(const char32_t[4]); ---------------- These should presumably be references to arrays, rather than arrays, or the parameter type is as if you wrote (for example) `void f(const char *)`, which shouldn't get the special treatment here. [over.ics.list]p4 mentions this in its footnote: "Otherwise, if the parameter type is a character array [Footnote: Since there are no parameters of array type, this will only occur as the referenced type of a reference parameter.] and the initializer list has a single element that is an appropriately-typed string-literal (9.4.3), the implicit conversion sequence is the identity conversion." Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D87561/new/ https://reviews.llvm.org/D87561 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits