rsmith added a comment. Thanks, this looks good, just a couple of minor things and then it should be ready to land.
Do you have commit access or will you need someone else to commit this for you? ================ Comment at: lib/AST/ExprConstant.cpp:152 + uint64_t &ArraySize, QualType &Type, bool &IsArray, + bool &isUnsizedArray) { // This only accepts LValueBases from APValues, and APValues don't support ---------------- Please start variable names with an uppercase letter. ================ Comment at: lib/AST/ExprConstant.cpp:168 + ArraySize = 0; + isUnsizedArray = true; + } ---------------- The other 'most derived' paths through here should set this back to `false` (a sized array in a field in an element of an unsized array does not give an unsized array). ================ Comment at: lib/AST/ExprConstant.cpp:1301 void addUnsizedArray(EvalInfo &Info, QualType ElemTy) { - assert(Designator.Entries.empty() && getType(Base)->isPointerType()); - assert(isBaseAnAllocSizeCall(Base) && - "Only alloc_size bases can have unsized arrays"); - Designator.FirstEntryIsAnUnsizedArray = true; Designator.addUnsizedArrayUnchecked(ElemTy); } ---------------- We should call `checkSubobject` here, for cases like: ``` void f(int n) { int arr[2][n]; constexpr int *p = &arr[2][0]; } ``` ... which we should reject because `arr[2]` is a one-past-the-end lvalue, so cannot be indexed (we reject this if `n` is instead a constant). https://reviews.llvm.org/D32372 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits