File: dcompute.d

package info (click to toggle)
ldc 1%3A1.30.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 59,248 kB
  • sloc: cpp: 61,598; ansic: 14,545; sh: 1,014; makefile: 972; asm: 510; objc: 135; exp: 48; python: 12
file content (88 lines) | stat: -rw-r--r-- 2,867 bytes parent folder | download
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
// RUN: not %ldc -o- -verrors=0 -I%S %s 2>&1 | FileCheck %s


@compute(CompileFor.deviceOnly) module tests.semaintic.dcompute;
import ldc.dcompute;
import inputs.notatcompute : somefunc;

extern(C) bool perhaps();
//CHECK: dcompute.d([[@LINE+1]]): Error: {{.*}} interfaces and classes not allowed in `@compute` code
interface I {}

//CHECK: dcompute.d([[@LINE+1]]): Error: {{.*}} interfaces and classes not allowed in `@compute` code
class C : Throwable { this() { super(""); } }

//CHECK: dcompute.d([[@LINE+1]]): Error: {{.*}} global variables not allowed in `@compute` code
C c;

void func()
{
    //CHECK: dcompute.d([[@LINE+1]]): Error: {{.*}} associative arrays not allowed in `@compute` code
    int[int] foo;
    //CHECK: dcompute.d([[@LINE+1]]): Error: array literal in `@compute` code not allowed
    auto bar = [0, 1, 2];
    //CHECK: dcompute.d([[@LINE+1]]): Error: cannot use `new` in `@compute` code
    auto baz = new int;

    //CHECK: dcompute.d([[@LINE+1]]): Error: {{.*}} interfaces and classes not allowed in `@compute` code
    I i;
    //CHECK: dcompute.d([[@LINE+1]]): Error: {{.*}} interfaces and classes not allowed in `@compute` code
    C cc;
    int[] quux;
    //CHECK: dcompute.d([[@LINE+1]]): Error: can only call functions from other `@compute` modules in `@compute` code
    quux.length = 1;
    //CHECK: dcompute.d([[@LINE+1]]): Error: cannot use operator `~=` in `@compute` code
    quux ~= 42;
    //CHECK: dcompute.d([[@LINE+1]]): Error: cannot use operator `~` in `@compute` code
    cast(void) (quux ~ 1);
    //CHECK: dcompute.d([[@LINE+1]]): Error: typeinfo not available in `@compute` code
    cast(void) typeid(int);
    //CHECK: dcompute.d([[@LINE+1]]): Error: cannot use `synchronized` in `@compute` code
    synchronized {}
    //CHECK: dcompute.d([[@LINE+1]]): Error: string literals not allowed in `@compute` code
    auto s = "geaxsese";
    //CHECK: dcompute.d([[@LINE+1]]): Error: cannot `switch` on strings in `@compute` code
    switch(s)
    {
        default:
            break;
    }

    //CHECK: dcompute.d([[@LINE+1]]): Error: can only call functions from other `@compute` modules in `@compute` code
    somefunc();
    if (__dcompute_reflect(ReflectTarget.Host,0))
        //CHECK-NOT: Error:
        somefunc();

    //CHECK: dcompute.d([[@LINE+1]]): Error: no exceptions in `@compute` code
    try
    {
        func1();
    }
    catch(C c)
    {
    }

    if (perhaps())
        //CHECK: dcompute.d([[@LINE+1]]): Error: no exceptions in `@compute` code
        throw c;

    //CHECK-NOT: Error:
    try
    {
        func1();
    }
    finally
    {
        func2();
    }
    //CHECK-NOT: Error:
    scope(exit)
        func2();
}

void func1() {}
void func2() {}

//CHECK: dcompute.d([[@LINE+1]]): Error: pragma `lib` linking additional libraries not supported in `@compute` code
pragma(lib, "bar");