From: Chad Rosier Date: Fri, 19 Oct 2012 20:36:37 +0000 (+0000) Subject: [ms-inline asm] Set the SemaCallback in the TargetAsmParser. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=793c405c28581f24543f021bd833b8c47af28ed3;p=clang [ms-inline asm] Set the SemaCallback in the TargetAsmParser. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166310 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaStmtAsm.cpp b/lib/Sema/SemaStmtAsm.cpp index 939685599c..8eae03c987 100644 --- a/lib/Sema/SemaStmtAsm.cpp +++ b/lib/Sema/SemaStmtAsm.cpp @@ -462,13 +462,15 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, Parser->setParsingInlineAsm(true); TargetParser->setParsingInlineAsm(true); + MCAsmParserSemaCallbackImpl MCAPSI(this); + TargetParser->setSemaCallback(&MCAPSI); + unsigned NumOutputs; unsigned NumInputs; std::string AsmStringIR; SmallVector OpDecls; SmallVector Constraints; SmallVector Clobbers; - MCAsmParserSemaCallbackImpl MCAPSI(this); if (Parser->ParseMSInlineAsm(AsmLoc.getPtrEncoding(), AsmStringIR, NumOutputs, NumInputs, OpDecls, Constraints, Clobbers, MII, IP, MCAPSI)) diff --git a/test/CodeGen/ms-inline-asm.c b/test/CodeGen/ms-inline-asm.c index 387a49cfd2..a925128cb1 100644 --- a/test/CodeGen/ms-inline-asm.c +++ b/test/CodeGen/ms-inline-asm.c @@ -1,6 +1,6 @@ // REQUIRES: x86-64-registered-target // RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -O0 -fms-extensions -fenable-experimental-ms-inline-asm -w -emit-llvm -o - | FileCheck %s - +#if 0 void t1() { // CHECK: @t1 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind @@ -114,3 +114,26 @@ unsigned t12(void) { // CHECK: t12 // CHECK: call void asm sideeffect inteldialect "mov eax, $2\0A\09mov $0, eax\0A\09mov eax, $3\0A\09mov $1, eax", "=*m,=*m,*m,*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}}) nounwind } +#endif +void t13() { + char i = 1; + short j = 2; + __asm movzx eax, i + __asm movzx eax, j +} +#if 0 +void t13() { + unsigned i = 1, j = 2; +// __asm mov eax, [ebx] +// __asm mov eax, [4*ecx] +// __asm mov eax, [4] +// __asm mov eax, [ebx + 4*ecx] +// __asm mov eax, [ebx + 4*ecx + 4] + __asm mov eax, [i] +// __asm mov eax, [i + 4*ecx] +// __asm mov eax, [i + 4*ecx + 4] +// __asm mov eax, [4*i] +// __asm mov eax, [ebx + 4*i] +// __asm mov eax, [ebx + 4*i + 4] +} +#endif