llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Akash Manna (akash-manna-sky) <details> <summary>Changes</summary> Fixes #<!-- -->165458 A `bool` vector declared with `ext_vector_type` isn't lowered as an LLVM vector in memory: `ConvertTypeForMem` packs it into a single integer with one bit per element. `BuildExtVectorType` only checked that the element count fits in 32 bits, though, so a vector of 187,553,262 bools got through Sema and the first consumer that needed its memory type (the zero initializer of a tentative definition here) asked `IntegerType::get` for far more than the 2^23 bits it supports. Loads, stores, constant initializers and debug info would have tripped over the same type. The element count is now bounded by `llvm::IntegerType::MAX_INT_BITS` (2^23 elements) when the type is built, reusing the existing "vector size too large" error, so the type never exists. The bound applies to every element type rather than just `bool`, because Sema also manufactures bool vectors out of other ext vectors: `c ? true : false` with a `char` ext vector condition produces a bool vector of the same length, in C and C++ alike, and crashed the same way. `vector_size` is left alone since it doesn't allow `bool` elements in the first place. --- Full diff: https://github.com/llvm/llvm-project/pull/226375.diff 4 Files Affected: - (modified) clang/docs/ReleaseNotes.md (+4) - (modified) clang/lib/Sema/SemaType.cpp (+5-3) - (modified) clang/test/Sema/types.c (+9) - (modified) clang/test/SemaCXX/vector.cpp (+9) ``````````diff The server is unavailable at this time. Please wait a few minutes before you try again. `````````` </details> https://github.com/llvm/llvm-project/pull/226375 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
