Some code that compiles but shouldn't

H. S. Teoh hsteoh at
Mon Dec 30 18:35:26 UTC 2019

On Mon, Dec 30, 2019 at 06:18:49PM +0000, uranuz via Digitalmars-d-learn wrote:
> 	void getCompiledTemplate(HTTPContext ctx)
> 	{
> 		import std.exception: enforce;
> 		enforce(ctx, `ctx is null`);
> 		enforce(ctx.request, `ctx.request is null`);
> 		enforce(ctx.request.form, `ctx.request is null`);
> 		enforce(ivyEngine !is null, `ivyEngine is null`);
> 		string moduleName = ctx.request.form[`moduleName`];
> 		auto mod = ivyEngine.getByModuleName(moduleName);
> 		return ctx.response.write(mod.toStdJSON().toString());
> 	}
> So as you see I have added a lot of enforce to test if all variables
> are not null. But nothing was null and the reason of segfault were
> unclear.  Today I just went home. Opened a bottle of beer. And have
> noticed that function is marked as returning `void`, but in fact it
> doesn't. When I fixed this segfault have gone. But why this even
> compiled?! Interesting...

That's weird indeed. Do you have a minimal case that reproduces this
problem? I tried to return the result of a non-void function call from a
void function, and it wouldn't compile, as expected.  It would be
interesting to see when exactly this compiler check is wrongly skipped.


Ignorance is bliss... until you suffer the consequences!

More information about the Digitalmars-d-learn mailing list