asm.c revision 79bc64ceb2586246c74b2584be56ecef00a0c9c1
16fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson// RUN: clang %s -arch=i386 -verify -fsyntax-only
204728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson
304728b7ea928b029f165fc67d32ced40e6868b31Anders Carlssonvoid
404728b7ea928b029f165fc67d32ced40e6868b31Anders Carlssonf()
504728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson{
604728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson  int i;
704728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson
804728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson  asm ("foo\n" : : "a" (i + 2));
904728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson  asm ("foo\n" : : "a" (f())); // expected-error {{invalid type 'void' in asm input}}
1004728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson
1104728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson  asm ("foo\n" : "=a" (f())); // expected-error {{invalid lvalue in asm output}}
1204728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson  asm ("foo\n" : "=a" (i + 2)); // expected-error {{invalid lvalue in asm output}}
1342e1ee0702d8267d632df0fdb5c479a582877c6fAnders Carlsson
1442e1ee0702d8267d632df0fdb5c479a582877c6fAnders Carlsson  asm ("foo\n" : [symbolic_name] "=a" (i) : "[symbolic_name]" (i));
1542e1ee0702d8267d632df0fdb5c479a582877c6fAnders Carlsson  asm ("foo\n" : "=a" (i) : "[" (i)); // expected-error {{invalid input constraint '[' in asm}}
1642e1ee0702d8267d632df0fdb5c479a582877c6fAnders Carlsson  asm ("foo\n" : "=a" (i) : "[foo" (i)); // expected-error {{invalid input constraint '[foo' in asm}}
1742e1ee0702d8267d632df0fdb5c479a582877c6fAnders Carlsson  asm ("foo\n" : "=a" (i) : "[symbolic_name]" (i)); // expected-error {{invalid input constraint '[symbolic_name]' in asm}}
1804728b7ea928b029f165fc67d32ced40e6868b31Anders Carlsson}
196fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson
206fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlssonvoid
216fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlssonclobbers()
226fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson{
236fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "ax", "#ax", "%ax");
246fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "eax", "rax", "ah", "al");
256fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "0", "%0", "#0");
266fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "foo"); // expected-error {{unknown register name 'foo' in asm}}
276fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "52");
286fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "53"); // expected-error {{unknown register name '53' in asm}}
296fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "-1"); // expected-error {{unknown register name '-1' in asm}}
306fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson  asm ("nop" : : : "+1"); // expected-error {{unknown register name '+1' in asm}}
316fa9086043b0338d895a4cdb0ec8542530af90d7Anders Carlsson}
326bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattner
336bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattner// rdar://6094010
346bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattnervoid test3() {
356bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattner  int x;
366bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattner  asm(L"foo" : "=r"(x)); // expected-error {{wide string}}
376bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattner  asm("foo" : L"=r"(x)); // expected-error {{wide string}}
386bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattner}
396bc52112dbc54551bd8e215d95bba4791b2275f7Chris Lattner
40d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson// <rdar://problem/6156893>
41d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlssonvoid test4(const volatile void *addr)
42d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson{
43d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson    asm ("nop" : : "r"(*addr)); // expected-error {{invalid type 'void const volatile' in asm input for constraint 'r'}}
44d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson    asm ("nop" : : "m"(*addr));
45d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson
46d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson    asm ("nop" : : "r"(test4(addr))); // expected-error {{invalid type 'void' in asm input for constraint 'r'}}
47d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson    asm ("nop" : : "m"(test4(addr))); // expected-error {{invalid lvalue in asm input for constraint 'm'}}
48d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson
49e6ea27995fb15add0de47588b4226049fa0753e5Anders Carlsson    asm ("nop" : : "m"(f())); // expected-error {{invalid lvalue in asm input for constraint 'm'}}
50e6ea27995fb15add0de47588b4226049fa0753e5Anders Carlsson}
51e6ea27995fb15add0de47588b4226049fa0753e5Anders Carlsson
52e6ea27995fb15add0de47588b4226049fa0753e5Anders Carlsson// <rdar://problem/6512595>
53e6ea27995fb15add0de47588b4226049fa0753e5Anders Carlssonvoid test5()
54e6ea27995fb15add0de47588b4226049fa0753e5Anders Carlsson{
55e6ea27995fb15add0de47588b4226049fa0753e5Anders Carlsson  asm("nop" : : "X" (8));
56d9fca6e3950346ea503f92f27ed0f9d8edde9febAnders Carlsson}
5779bc64ceb2586246c74b2584be56ecef00a0c9c1Anders Carlsson
5879bc64ceb2586246c74b2584be56ecef00a0c9c1Anders Carlsson// PR3385
5979bc64ceb2586246c74b2584be56ecef00a0c9c1Anders Carlssonvoid test6(long i)
6079bc64ceb2586246c74b2584be56ecef00a0c9c1Anders Carlsson{
6179bc64ceb2586246c74b2584be56ecef00a0c9c1Anders Carlsson  asm("nop" : : "er"(i));
6279bc64ceb2586246c74b2584be56ecef00a0c9c1Anders Carlsson}