blob: 1b249ee7b35e9984507f2cd58bd936bb6d1cac5d [file] [log] [blame]
// { 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 'End of File' when expecting ','" "" { target *-*-* } .-2 }
// { dg-error "found 'End of File' when expecting ']'" "" { target *-*-* } .-3 }
// { dg-error "found 'End of File' 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' is a 'double' definition and cannot be modified" }
}
void semantic2()
{
semantic2a(3.6); // { dg-error "template instance 'asm1.semantic2a!double' error instantiating" }
}
void semantic3()
{
asm
{
unknown; // { dg-error "undefined identifier 'unknown'" }
}
}
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" }
}
}