From 46d8fc9d6b6b2f6e1f3a52a8667bf79d7a46452d Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Fri, 19 Oct 2012 20:36:37 +0000 Subject: [PATCH] [ms-inline asm] Set the SemaCallback in the TargetAsmParser. llvm-svn: 166310 --- clang/lib/Sema/SemaStmtAsm.cpp | 4 +++- clang/test/CodeGen/ms-inline-asm.c | 25 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp index 939685599c40..8eae03c987c5 100644 --- a/clang/lib/Sema/SemaStmtAsm.cpp +++ b/clang/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/clang/test/CodeGen/ms-inline-asm.c b/clang/test/CodeGen/ms-inline-asm.c index 387a49cfd211..a925128cb1df 100644 --- a/clang/test/CodeGen/ms-inline-asm.c +++ b/clang/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