mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
Fix Issue 20908 - -preview=nosharedaccess requires zero-initializion for aggregates (#15023)
This commit is contained in:
parent
270845e426
commit
ec07137001
2 changed files with 40 additions and 20 deletions
|
@ -13375,6 +13375,12 @@ bool checkSharedAccess(Expression e, Scope* sc, bool returnRef = false)
|
|||
|
||||
bool visitVar(VarExp e)
|
||||
{
|
||||
// https://issues.dlang.org/show_bug.cgi?id=20908
|
||||
// direct access to init symbols is ok as they
|
||||
// cannot be modified.
|
||||
if (e.var.isSymbolDeclaration())
|
||||
return false;
|
||||
|
||||
// https://issues.dlang.org/show_bug.cgi?id=22626
|
||||
// Synchronized functions don't need to use core.atomic
|
||||
// when accessing `this`.
|
||||
|
|
|
@ -11,34 +11,48 @@ ref shared(int) f(return shared ref int y)
|
|||
}
|
||||
|
||||
// https://issues.dlang.org/show_bug.cgi?id=20908
|
||||
struct S
|
||||
{
|
||||
int i = 2;
|
||||
}
|
||||
|
||||
union U
|
||||
{
|
||||
int i = 1;
|
||||
bool b;
|
||||
}
|
||||
|
||||
void test20908()
|
||||
{
|
||||
// shared locals (or struct members) should be able to be initialised:
|
||||
shared int x;
|
||||
// shared locals (or struct members) should be able to be initialised:
|
||||
shared int x;
|
||||
|
||||
ref shared(int) fun()
|
||||
{
|
||||
static shared(int) val;
|
||||
ref shared(int) fun()
|
||||
{
|
||||
static shared(int) val;
|
||||
|
||||
// return by reference
|
||||
return val;
|
||||
}
|
||||
// return by reference
|
||||
return val;
|
||||
}
|
||||
|
||||
ref shared(int) fun2()
|
||||
{
|
||||
static shared(int)* val;
|
||||
ref shared(int) fun2()
|
||||
{
|
||||
static shared(int)* val;
|
||||
|
||||
// transfer pointer to reference
|
||||
return *val;
|
||||
}
|
||||
// transfer pointer to reference
|
||||
return *val;
|
||||
}
|
||||
|
||||
ref shared(int) fun3()
|
||||
{
|
||||
static shared(int)*** val;
|
||||
ref shared(int) fun3()
|
||||
{
|
||||
static shared(int)*** val;
|
||||
|
||||
// Multiple indirections
|
||||
return ***val;
|
||||
}
|
||||
// Multiple indirections
|
||||
return ***val;
|
||||
}
|
||||
|
||||
shared S s;
|
||||
shared U u;
|
||||
}
|
||||
|
||||
// Simple tests for `DotVarExp`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue