
Constraint `*m` should be used when the address of a variable is passed as a value. And the constraint is missing for MS inline assembly when sth is written to the address of the variable. The missing would cause FE delete the definition of the static varible, and then result in "undefined reference to xxx" issue. Reviewed By: xiangzhangllvm Differential Revision: https://reviews.llvm.org/D113096
11 lines
454 B
C
11 lines
454 B
C
// REQUIRES: x86-registered-target
|
|
// Check the constraint "*m" of operand arr and the definition of arr is not removed by FE
|
|
// RUN: %clang_cc1 %s -fasm-blocks -triple i386-apple-darwin10 -emit-llvm -o - | FileCheck %s
|
|
|
|
static int arr[10];
|
|
void t1() {
|
|
// CHECK: @arr = internal global [10 x i32]
|
|
// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0[edx * $$4],edx", "=*m,{{.*}}([10 x i32]* @arr)
|
|
__asm mov dword ptr arr[edx*4],edx
|
|
}
|