December 31, 2021

this code:

#!/usr/bin/env dub
/+ dub.sdl:
    buildOptions "betterC"
+/


static pl1()
{
	class tc1{

	}
	auto vtc1 = new tc1();
	
	return vtc1.mangleof;
}

enum vpl1 = {
	class tc1{

	}
	auto vtc1 = new tc1();
	
	return vtc1.mangleof;
};

pragma(msg,pl1);
pragma(msg,pl1());
pragma(msg,vpl1());


version(D_BetterC)
{
	pragma(msg,"is betterC");
	extern (C) int main(int argc, char** argv) {
		return 0;
	}
}else{
	pragma(msg,"not betterC");
	void main()
	{
	}
}

for ldc2

dub build --compiler=ldc2
Performing "debug" build using ldc2 for x86_64.
wasm-runtime ~master: building configuration "application"...
_D3app3pl1FZ4vtc1CQqQoFZ3tc1
_D3app3pl1FZ4vtc1CQqQoFZ3tc1
_D3app9__lambda5MFZ4vtc1CQxQvMFZ3tc1
is betterC
Linking...
test.obj : error LNK2019: unresolved external symbol _D3app3pl1FZ3tc17__ClassZ referenced in function _D3app3pl1FNaNbNfZAya
test.obj : error LNK2019: unresolved external symbol _d_allocclass referenced in function _D3app3pl1FNaNbNfZAya
test.obj : error LNK2001: unresolved external symbol _D6object6Object8toStringMFZAya
test.obj : error LNK2001: unresolved external symbol _D6object6Object6toHashMFNbNeZm
test.obj : error LNK2001: unresolved external symbol _D6object6Object5opCmpMFCQqZi
test.obj : error LNK2001: unresolved external symbol _D6object6Object8opEqualsMFCQtZb



Should the environment in which the Pl1 function is compiled be the host environment or the target environment?

The result is correct during compilation,

linker errors occur in betterc mode
I think static functions should use the host environment


Symbolic links should not be used after the results are obtained