[PATCH] D133934: [clang][Interp] Handle sizeof() expressions

Shafik Yaghmour via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 15 16:17:25 PDT 2022


shafik added inline comments.


================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:290
+    return this->emitConst(
+        E, Ctx.getASTContext().getTypeSizeInChars(ArgType).getQuantity());
+  }
----------------
aaron.ballman wrote:
> erichkeane wrote:
> > shafik wrote:
> > > I notice that `HandleSizeof` special cases `void` and function types. 
> > OOOH, DEFINITELY make sure you test function types here, and figure out how HandleSizeof does it.
> > 
> > BUT, I think 'void' should error/be an invalid before we get here?
> > 
> > ALSO, now that I think further, I'm sure @aaron.ballman has a bunch of runtime-evaluated sizeof examples to share around vlas.
> I was just about to comment about everyone's favorite horrible C++ extension. :-D We should make sure we properly reject code like:
> ```
> void func() {
>   int n = 12;
>   constexpr int oofda = sizeof(int[n++]);
> }
> ```
> while accepting code like:
> ```
> consteval int foo(int n) {
>   return sizeof(int[n]);
> }
> constinit int var = foo(5);
> ```
Note, that clang currently treats that as ill-formed and there is divergence with how gcc and clang treat the `constexpr` case as well.

So if we are going to say we want this to work then we should file a bug against clang. 


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

https://reviews.llvm.org/D133934



More information about the cfe-commits mailing list