summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gdc.dg/asm1.d
blob: 1b249ee7b35e9984507f2cd58bd936bb6d1cac5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// { 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" }
    }
}