mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-15 20:51:35 +00:00
[Constants] don't die processing non-ConstantInt GEP indices in isGEPWithNoNotionalOverIndexing() (PR31262)
This should fix: https://llvm.org/bugs/show_bug.cgi?id=31262 llvm-svn: 289401
This commit is contained in:
parent
7c98a79f7b
commit
81ed3499cd
@ -1071,13 +1071,15 @@ bool ConstantExpr::isGEPWithNoNotionalOverIndexing() const {
|
||||
gep_type_iterator GEPI = gep_type_begin(this), E = gep_type_end(this);
|
||||
User::const_op_iterator OI = std::next(this->op_begin());
|
||||
|
||||
// The remaining indices must be compile-time known integers within the
|
||||
// bounds of the corresponding notional static array types.
|
||||
// The remaining indices may be compile-time known integers within the bounds
|
||||
// of the corresponding notional static array types.
|
||||
for (; GEPI != E; ++GEPI, ++OI) {
|
||||
ConstantInt *CI = dyn_cast<ConstantInt>(*OI);
|
||||
if (GEPI.isBoundedSequential() &&
|
||||
(CI->getValue().getActiveBits() > 64 ||
|
||||
CI->getZExtValue() >= GEPI.getSequentialNumElements()))
|
||||
if (isa<UndefValue>(*OI))
|
||||
continue;
|
||||
auto *CI = dyn_cast<ConstantInt>(*OI);
|
||||
if (!CI || (GEPI.isBoundedSequential() &&
|
||||
(CI->getValue().getActiveBits() > 64 ||
|
||||
CI->getZExtValue() >= GEPI.getSequentialNumElements())))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -65,6 +65,17 @@ define i1 @gep4() {
|
||||
; CHECK-NEXT: ret i1 false
|
||||
}
|
||||
|
||||
@a = common global [1 x i32] zeroinitializer, align 4
|
||||
|
||||
define i1 @PR31262() {
|
||||
; CHECK-LABEL: @PR31262(
|
||||
; CHECK-NEXT: ret i1 icmp uge (i32* getelementptr ([1 x i32], [1 x i32]* @a, i64 0, i64 undef), i32* getelementptr inbounds ([1 x i32], [1 x i32]* @a, i32 0, i32 0))
|
||||
;
|
||||
%idx = getelementptr inbounds [1 x i32], [1 x i32]* @a, i64 0, i64 undef
|
||||
%cmp = icmp uge i32* %idx, getelementptr inbounds ([1 x i32], [1 x i32]* @a, i32 0, i32 0)
|
||||
ret i1 %cmp
|
||||
}
|
||||
|
||||
define i1 @gep5() {
|
||||
; CHECK-LABEL: @gep5(
|
||||
%x = alloca %gept, align 8
|
||||
|
Loading…
x
Reference in New Issue
Block a user