// REQUIRES: x86-registered-target
// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -verify -fasm-blocks
// Disabling gnu inline assembly should have no effect on this testcase
// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -verify -fasm-blocks -fno-gnu-inline-asm

#define M __asm int 0x2c
#define M2 int

void t1(void) { M }
void t2(void) { __asm int 2ch }
void t3(void) { __asm M2 2ch }
void t4(void) { __asm mov eax, fs:[10h] }
void t5(void) {
  __asm {
    int 0x2c ; } asm comments are fun! }{
  }
  __asm {}
}
int t6(void) {
  __asm int 3 ; } comments for single-line asm
  __asm {}

  __asm int 4
  return 10;
}
void t7(void) {
  __asm {
    push ebx
    mov ebx, 07h
    pop ebx
  }
}
void t8(void) {
  __asm nop __asm nop __asm nop
}
void t9(void) {
  __asm nop __asm nop ; __asm nop
}
void t10(void) {
  __asm {
    mov eax, 0
    __asm {
      mov eax, 1
      {
        mov eax, 2
      }
    }
  }
}
void t11(void) {
  do { __asm mov eax, 0 __asm { __asm mov edx, 1 } } while(0);
}
void t12(void) {
  __asm jmp label // expected-error {{use of undeclared label 'label'}}
}
void t13(void) {
  __asm m{o}v eax, ebx // expected-error {{unknown token in expression}}
}

void t14(void) {
  enum { A = 1, B };
  __asm mov eax, offset A // expected-error {{offset operator cannot yet handle constants}}
}

int t_fail(void) { // expected-note {{to match this}}
  __asm 
  __asm { // expected-error 3 {{expected}} expected-note {{to match this}}
