Summary: This patch extends the __asm parser to make it keep parsing input tokens as inline assembly if a single-line __asm line is followed by another line starting with __asm too. It also makes sure that we correctly keep matching braces in such situations by separating the notions of how many braces we are matching and whether we are in single-line asm block mode. Reviewers: rnk Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D4598 llvm-svn: 213916
54 lines
947 B
C
54 lines
947 B
C
// REQUIRES: x86-registered-target
|
|
// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -verify -fasm-blocks
|
|
|
|
#define M __asm int 0x2c
|
|
#define M2 int
|
|
|
|
void t1(void) { M }
|
|
void t2(void) { __asm int 0x2c }
|
|
void t3(void) { __asm M2 0x2c }
|
|
void t4(void) { __asm mov eax, fs:[0x10] }
|
|
void t5() {
|
|
__asm {
|
|
int 0x2c ; } asm comments are fun! }{
|
|
}
|
|
__asm {}
|
|
}
|
|
int t6() {
|
|
__asm int 3 ; } comments for single-line asm
|
|
__asm {}
|
|
|
|
__asm int 4
|
|
return 10;
|
|
}
|
|
void t7() {
|
|
__asm {
|
|
push ebx
|
|
mov ebx, 0x07
|
|
pop ebx
|
|
}
|
|
}
|
|
void t8() {
|
|
__asm nop __asm nop __asm nop
|
|
}
|
|
void t9() {
|
|
__asm nop __asm nop ; __asm nop
|
|
}
|
|
void t10() {
|
|
__asm {
|
|
mov eax, 0
|
|
__asm {
|
|
mov eax, 1
|
|
{
|
|
mov eax, 2
|
|
}
|
|
}
|
|
}
|
|
}
|
|
void t11() {
|
|
do { __asm mov eax, 0 __asm { __asm mov edx, 1 } } while(0);
|
|
}
|
|
int t_fail() { // expected-note {{to match this}}
|
|
__asm
|
|
__asm { // expected-error 2 {{expected}} expected-note {{to match this}}
|