62 lines
1.2 KiB
D
62 lines
1.2 KiB
D
|
|
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();
|
|
}
|