summaryrefslogtreecommitdiffstats
path: root/tests/language-feature/pointer/const-ptr-variations.slang
blob: a2619d6c4de6454bb74a1478b4db10644c05d315 (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
//TEST:SIMPLE(filecheck=CHECK_1):-stage compute -entry computeMain -target spirv -DT1
//TEST:SIMPLE(filecheck=CHECK_2):-stage compute -entry computeMain -target spirv -DT2
//TEST:SIMPLE(filecheck=CHECK_3):-stage compute -entry computeMain -target spirv -DT3
//TEST:SIMPLE(filecheck=CHECK_4):-stage compute -entry computeMain -target spirv -DT4

// Tests for invalid use of `const` with Ptr/T*
// Due to bad syntax breaking the parser, it is more robust to use disjoint tests with
// #define's.
cbuffer Globals
{
    int* ptr;
}

[numthreads(1, 1, 1)]
void computeMain(int id : SV_DispatchThreadID)
{
    // disallowed syntax with modifier `const`
#ifdef T1
    // CHECK_1: ([[# @LINE+1]]): error
    int const* ptr1 = ptr;
#endif

#ifdef T2
    // CHECK_2: ([[# @LINE+1]]): error
    int* const ptr2 = ptr;
#endif

#ifdef T3
    // CHECK_3: ([[# @LINE+1]]): error 20017
    const int* ptr3 = ptr;
    // CHECK_3: ([[# @LINE+1]]): error 20018
    Ptr<const int> ptr4 = ptr;
#endif

#ifdef T4
    // CHECK_4: OpEntryPoint
    // CHECK_4-NOT: error
    const Ptr<int> ptr5 = ptr;
#endif
}