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}