ahatanak marked an inline comment as done. ahatanak added inline comments.
================ Comment at: lib/Sema/SemaExprObjC.cpp:534 + NSStringPointer, NSStringPointer); + return new (Context) ObjCBoxedExpr(SL, BoxedType, nullptr, SR); + } ---------------- rjmccall wrote: > You're implicitly dropping sugar from the source expression here; I really > think you should preserve that, and if it means you end up having to look > through array-decay expressions, that's not the end of the world. > > The need for a special case here is just to allow us to compile these even if > there isn't a boxing method available? > > Do you need to restrict the type of the string literal so that it doesn't > apply to e.g. wide strings? Line 516 checks that the pointee type has the same unqualified type as 'char'. If the string literal inside the parentheses is of a wider type (e.g., `@(u"abc")`), this piece of code won't be executed, and a diagnostic is emitted later ("illegal type 'const char16_t *' used in a boxed expression"). The original motivation for special-casing string literals inside boxed expressions was to silence the `-Wnullable-to-nonnull-conversion` warning mentioned here: https://oleb.net/2018/@keypath/. The warning is issued because the return type of `stringWithUTF8String` is nullable. ``` ... + (nullable instancetype)stringWithUTF8String:(const char *)nullTerminatedCString; ... NSString * _Nonnull ptr = @("abc"); // expected-error {{implicit conversion from nullable pointer 'NSString * _Nullable' to non-nullable pointer type 'NSString * _Nonnull'}} ``` Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D58729/new/ https://reviews.llvm.org/D58729 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits