NAKAMURA Takumi | 0acd8a7 | 2013-12-04 03:41:33 +0000 | [diff] [blame] | 1 | // REQUIRES: x86-registered-target |
Chad Rosier | e3aac2c | 2013-01-22 19:38:32 +0000 | [diff] [blame] | 2 | // RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -fasm-blocks -Wno-microsoft -verify -fsyntax-only |
Bob Wilson | 317be45 | 2012-09-24 19:57:59 +0000 | [diff] [blame] | 3 | |
| 4 | void t1(void) { |
Eli Friedman | d5d136b | 2012-10-23 02:43:30 +0000 | [diff] [blame] | 5 | __asm __asm // expected-error {{__asm used with no assembly instructions}} |
| 6 | } |
| 7 | |
| 8 | void f() { |
Chad Rosier | 0130f82 | 2012-10-26 18:33:59 +0000 | [diff] [blame] | 9 | int foo; |
Eli Friedman | d5d136b | 2012-10-23 02:43:30 +0000 | [diff] [blame] | 10 | __asm { |
| 11 | mov eax, eax |
| 12 | .unknowndirective // expected-error {{unknown directive}} |
| 13 | } |
| 14 | f(); |
| 15 | __asm { |
Benjamin Kramer | 6b72472 | 2013-12-01 11:48:10 +0000 | [diff] [blame] | 16 | mov eax, 1+=2 // expected-error {{unknown token in expression}} |
Eli Friedman | d5d136b | 2012-10-23 02:43:30 +0000 | [diff] [blame] | 17 | } |
| 18 | f(); |
| 19 | __asm { |
Benjamin Kramer | 6b72472 | 2013-12-01 11:48:10 +0000 | [diff] [blame] | 20 | mov eax, 1+++ // expected-error {{unknown token in expression}} |
Eli Friedman | d5d136b | 2012-10-23 02:43:30 +0000 | [diff] [blame] | 21 | } |
Chad Rosier | 92c487d | 2013-01-18 00:51:29 +0000 | [diff] [blame] | 22 | f(); |
| 23 | __asm { |
Benjamin Kramer | 6b72472 | 2013-12-01 11:48:10 +0000 | [diff] [blame] | 24 | mov eax, LENGTH bar // expected-error {{unable to lookup expression}} |
Chad Rosier | 92c487d | 2013-01-18 00:51:29 +0000 | [diff] [blame] | 25 | } |
| 26 | f(); |
| 27 | __asm { |
Benjamin Kramer | 6b72472 | 2013-12-01 11:48:10 +0000 | [diff] [blame] | 28 | mov eax, SIZE bar // expected-error {{unable to lookup expression}} |
Chad Rosier | 92c487d | 2013-01-18 00:51:29 +0000 | [diff] [blame] | 29 | } |
| 30 | f(); |
| 31 | __asm { |
Benjamin Kramer | 6b72472 | 2013-12-01 11:48:10 +0000 | [diff] [blame] | 32 | mov eax, TYPE bar // expected-error {{unable to lookup expression}} |
Chad Rosier | 92c487d | 2013-01-18 00:51:29 +0000 | [diff] [blame] | 33 | } |
Bob Wilson | 317be45 | 2012-09-24 19:57:59 +0000 | [diff] [blame] | 34 | } |
Dmitri Gribenko | fc13b8b | 2013-12-03 00:48:09 +0000 | [diff] [blame] | 35 | |
| 36 | void rdar15318432(void) { |
| 37 | // We used to crash on this. When LLVM called back to Clang to parse a name |
| 38 | // and do name lookup, if parsing failed, we did not restore the lexer state |
| 39 | // properly. |
| 40 | |
| 41 | // expected-error@+2 {{expected identifier}} |
| 42 | __asm { |
| 43 | and ecx, ~15 |
| 44 | } |
| 45 | |
| 46 | int x = 0; |
| 47 | // expected-error@+3 {{expected identifier}} |
| 48 | __asm { |
| 49 | and ecx, x |
| 50 | and ecx, ~15 |
| 51 | } |
| 52 | } |