// { 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" }
    }
}
