tbaeder added inline comments.

================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:962-963
+  } else if (const auto *Ctor = dyn_cast<CXXConstructExpr>(Initializer)) {
+    const ArrayType *AT = Ctor->getType()->getAsArrayTypeUnsafe();
+    const auto *CAT = cast<ConstantArrayType>(AT);
+    size_t NumElems = CAT->getSize().getZExtValue();
----------------
aaron.ballman wrote:
> This should go through `ASTContext::getConstantArrayType()`. It may also be 
> worth a comment mentioning that VLAs can't have initializers and an unbounded 
> array has known bounds if it has an initializer, as I suspect that's the 
> reason you're not handling either of those here?
I'm not handling them because they are untested everywhere. :/


================
Comment at: clang/test/AST/Interp/arrays.cpp:188-200
+class A {
+public:
+  int a;
+  constexpr A(int m = 2) : a(10 + m) {}
+};
+class B {
+public:
----------------
aaron.ballman wrote:
> I'd like to see a test for when the class ends with a flexible array member 
> (ctor shouldn't be called for that case because we don't know how many 
> trailing objects there will be). That could show up as an unbounded member.
> 
> Also, a test case where the ctor will execute UB, to demonstrate we properly 
> diagnose arrays of default-constructed objects.
I added a test for a UB constructor, but a flexible array member shows up as a 
non-`ConstantArrayType` member, so the code runs into one or the other 
assertion.


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

https://reviews.llvm.org/D136920

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to