[PATCH] D137826: [clang] Allow comparing pointers to string literals

Tom Honermann via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 18 16:17:36 PST 2022


tahonermann added inline comments.


================
Comment at: clang/lib/AST/ExprConstant.cpp:12951-12954
+      // ObjC's @encode()
+      if (isa<ObjCEncodeExpr>(E->getLHS()->IgnoreParenImpCasts()) ||
+          isa<ObjCEncodeExpr>(E->getRHS()->IgnoreParenImpCasts()))
         return Error(E);
----------------
tbaeder wrote:
> tahonermann wrote:
> > A comment to explain this change would be helpful. It isn't intuitive (for me anyway) why Objective-C's `@encode` would require special handling here. Was this needed to avoid a test failure?
> In `../clang/test/CodeGenObjC/encode-test-4.m`:
> 
> ```
> int a(void) {
>   return @encode(int) == @encode(int) &&
>     @encode(Color) == @encode(long) &&
>     @encode(PrintColor) == @encode(int);
> }
> ```
> 
> The comparisons need to be rejected here and are folded to a `1` later on, it seems. Letting the comparison happen will lead to a `0`.
Apologies, I meant it would be helpful to add a comment to the code :)

I think `@encode(...)` expressions should be treated the same as string literals; the former is lowered to the latter; both contribute to the string table.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D137826/new/

https://reviews.llvm.org/D137826



More information about the cfe-commits mailing list