File: testconstsection.d

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (61 lines) | stat: -rw-r--r-- 1,260 bytes parent folder | download | duplicates (7)
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

string tls_var = "tls_string";

__gshared string data_var = "data_string";

__gshared string bss_var;

struct Range
{
    const(void)* bot;
    const(void)* top; // consider inclusive

    void addPtr(const(void)* p)
    {
        if (!bot || p < bot)
            bot = p;
        if (!top || p > top)
            top = p;
    }

    bool intersect(Range other)
    {
        return (bot <= other.top && top >= other.bot);
    }
}

void testStrings()
{
    // check that the strings don't overlap with the variables
    Range tls;
    Range data;
    Range bss;
    Range cdata;

    static string local_tls_var = "tls_string";
    static __gshared string local_data_var = "data_string";
    static __gshared string local_bss_var;

    tls.addPtr(&tls_var);
    tls.addPtr(&local_tls_var);

    data.addPtr(&data_var);
    data.addPtr(&local_data_var);

    bss.addPtr(&bss_var);
    bss.addPtr(&local_bss_var);

    cdata.addPtr(tls_var.ptr);
    cdata.addPtr(local_tls_var.ptr);
    cdata.addPtr(data_var.ptr);
    cdata.addPtr(local_data_var.ptr);

    assert(!cdata.intersect(tls),  "overlap with tls");
    assert(!cdata.intersect(data), "overlap with data");
    assert(!cdata.intersect(bss),  "overlap with bss");
}

void main()
{
    testStrings();
}