mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 22:26:05 +00:00

For inline WebAssembly, passing a numeric operand to global.get is unsupported. This causes encodeInstruction to reach an llvm_unreachable call, leading to undefined behaviors. This patch fixes the issue for this invalid instruction encoding, making it report an error by adding an MCContext field in class WebAssemblyMCCodeEmitter. Reviewed By: sbc100, bryanpkc Differential Revision: https://reviews.llvm.org/D154734
27 lines
875 B
LLVM
27 lines
875 B
LLVM
; RUN: not llc -O0 --mtriple=wasm32 -filetype=obj \
|
|
; RUN: -o /dev/null 2>&1 <%s | FileCheck %s
|
|
source_filename = "rust-issue-111471.c"
|
|
target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20"
|
|
target triple = "wasm32-unknown-unknown"
|
|
|
|
@__main_void = hidden alias i32 (), ptr @main
|
|
|
|
; Function Attrs: noinline nounwind optnone
|
|
define hidden void @get_global() #0 {
|
|
entry:
|
|
call void asm sideeffect "global.get 0", ""() #1, !srcloc !0
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: noinline nounwind optnone
|
|
define hidden i32 @main() #0 {
|
|
entry:
|
|
ret i32 0
|
|
}
|
|
|
|
attributes #0 = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+mutable-globals,+sign-ext" }
|
|
attributes #1 = { nounwind }
|
|
|
|
!0 = !{i64 32}
|
|
; CHECK: <unknown>:0: error: Wasm globals should only be accessed symbolically!
|