| // { dg-do compile } |
| module asm1; |
| |
| void parse1() |
| { |
| asm |
| { |
| ""h; // { dg-error "found 'h' when expecting ':'" } |
| } |
| } |
| |
| void parse2() |
| { |
| asm |
| { |
| "" : : "g" (1 ? 2 : 3); |
| "" : : "g" (1 ? 2 : :) 3; |
| // { dg-error "expression expected, not ':'" "" { target *-*-* } .-1 } |
| // { dg-error "expected constant string constraint for operand" "" { target *-*-* } .-2 } |
| } |
| } |
| |
| void parse3() |
| { |
| asm { "" [; } |
| // { dg-error "expression expected, not ';'" "" { target *-*-* } .-1 } |
| // { dg-error "found 'EOF' when expecting ','" "" { target *-*-* } .-2 } |
| // { dg-error "found 'EOF' when expecting ']'" "" { target *-*-* } .-3 } |
| // { dg-error "found 'EOF' when expecting ';'" "" { target *-*-* } .-4 } |
| } |
| |
| void parse4() |
| { |
| int expr; |
| asm |
| { |
| "%name" : [name] string (expr); // { dg-error "expected constant string constraint for operand, not 'string'" } |
| } |
| } |
| |
| void semantic1() |
| { |
| { |
| int one; |
| L1: |
| ; |
| } |
| asm { "" : : : : L1, L2; } |
| // { dg-error "goto skips declaration of variable asm1.semantic1.one" "" { target *-*-* } .-1 } |
| // { dg-error "goto skips declaration of variable asm1.semantic1.two" "" { target *-*-* } .-2 } |
| { |
| int two; |
| L2: |
| ; |
| } |
| } |
| |
| void semantic2a(X...)(X expr) |
| { |
| alias X[0] var1; |
| asm { "%0" : "=m" (var1); } // { dg-error "double 'double' is a type, not an lvalue" } |
| } |
| |
| void semantic2() |
| { |
| semantic2a(3.6); // { dg-error "template instance asm1.semantic2a!double error instantiating" } |
| } |
| |
| void semantic3() |
| { |
| asm |
| { |
| unknown; // { dg-error "undefined identifier" } |
| } |
| } |
| |
| struct S4 |
| { |
| template opDispatch(string Name, P...) |
| { |
| static void opDispatch(P) {} |
| } |
| } |
| |
| void semantic4() |
| { |
| asm |
| { |
| "%0" : : "m" (S4.foo); // { dg-error "template instance opDispatch!\"foo\" has no value" } |
| } |
| } |