================
@@ -534,39 +534,97 @@ static mlir::Value emitCXXNewAllocSize(CIRGenFunction
&cgf, const CXXNewExpr *e,
// Create a value for the variable number of elements
numElements = cgf.emitScalarExpr(*e->getArraySize());
auto numElementsType = mlir::cast<cir::IntType>(numElements.getType());
- [[maybe_unused]] unsigned numElementsWidth = numElementsType.getWidth();
-
- // We might need check for overflow.
-
- mlir::Value hasOverflow;
- // Classic codegen checks for the size variable being signed, having a
- // smaller width than size_t, and having a larger width than size_t.
- // However, the AST implicitly casts the size variable to size_t so none of
- // these conditions will ever be met.
- assert(
- !(*e->getArraySize())->getType()->isSignedIntegerOrEnumerationType() &&
- (numElementsWidth == sizeWidth) &&
- (numElements.getType() == cgf.sizeTy) &&
- "Expected array size to be implicitly cast to size_t!");
-
- // There are up to three conditions we need to test for:
- // 1) if minElements > 0, we need to check whether numElements is smaller
+ unsigned numElementsWidth = numElementsType.getWidth();
+
+ // The number of elements can have an arbitrary integer type;
+ // essentially, we need to multiply it by a constant factor, add a
+ // cookie size, and verify that the result is representable as a
+ // size_t. That's just a gloss, though, and it's wrong in one
----------------
erichkeane wrote:
`just a gloss` is a weird phrasing here.
https://github.com/llvm/llvm-project/pull/187790
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits