When using a ptrtoint to a size larger than the pointer width in a global initializer, we currently create a ptr & low_bit_mask style MCExpr, which will later result in a relocation error during object file emission. This patch rejects the constant expression already during lowerConstant(), which results in a much clearer error message that references the constant expression at fault. This fixes https://github.com/llvm/llvm-project/issues/56400, for certain definitions of "fix". Differential Revision: https://reviews.llvm.org/D130366
15 lines
328 B
LLVM
15 lines
328 B
LLVM
; RUN: llc < %s -mtriple=i386-linux | FileCheck %s
|
|
%union.x = type { i32 }
|
|
|
|
; CHECK: .globl r
|
|
; CHECK: r:
|
|
; CHECK: .long r
|
|
|
|
@r = global %union.x { i32 ptrtoint (ptr @r to i32) }, align 4
|
|
|
|
; CHECK: .globl x
|
|
; CHECK: x:
|
|
; CHECK: .quad 3
|
|
|
|
@x = global i64 mul (i64 3, i64 ptrtoint (ptr getelementptr (i2, ptr null, i64 1) to i64))
|