aligned struct field weirdness
    realhet 
    real_het at hotmail.com
       
    Mon Jun 17 19:45:18 UTC 2024
    
    
  
Hello,
I'm having a weird case of access violation.
I tried to narrow the problem and put up a reproducible testCase 
on compilerexploer, but it requires my framework too which 
overrides std.stdio.writeln() in order to produce colorful text, 
and logging, etc.
The error is an access violation when I access the struct in the 
f() function.
Sometimes it can be fixed (marked the place.)
In one sentence: It is an aligned struct field, whose struct is 
given to a class as a template parameter.
Maybe the weirdness is caused by the align(16)? When the fields 
of the struct are placed on the instance of the class?
I know it's not reproduceable, maybe it was a bug that had been 
already fixed.  So I only ask if the situation is familiar to 
someone, please tell me, what tricks I need to avoid.
I can avoid the align using dummy fields.
I can allocate the struct with new.
But it's a bummer, that the nicest version is unstable.
```
import het;
struct S
{
	int a;
	align(16)//<-this triggers it
	int[4] b;
}
class A(T)
{
	version(none)
	{ T u; }
	else
	{
		T* p; //<- this fixes it.  (The struct is not on the class 
surface)
		ref u() { return *p; }
		this() { p = new T; }
	}
}
class B: A!S
{ void f() { writeln(u.text/+<-The access violation can be 
here+/); } }
void main()
{
	//writeln("a"); <- this fixes it
	auto b = new B; //<-scoped! can trigger it too
	b.f;
}
```
Thank You in advance.
    
    
More information about the Digitalmars-d-learn
mailing list