digitalmars.D.bugs - [Issue 14166] New: null dereference during CTFE
- via Digitalmars-d-bugs (63/63) Feb 10 2015 https://issues.dlang.org/show_bug.cgi?id=14166
https://issues.dlang.org/show_bug.cgi?id=14166 Issue ID: 14166 Summary: null dereference during CTFE Product: D Version: D1 & D2 Hardware: x86_64 OS: Linux Status: NEW Severity: regression Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: vlevenfeld gmail.com In the following code, I expect the pragma to output "int". When static if (1) causes a null dereference in CTFE. Manually lowering (static if (0)) causes the code to behave as expected. ///// struct Proxy (T) { T* ptr; ref deref () { return *ptr; } alias deref this; } struct Test { auto opIndex () { return this; } auto opIndex (int) { return 1; } } template Elem (R) { static if (0) // 0 => Elem == int; 1 => Error: dereference of null pointer 'this.ptr' alias Elem = typeof(R.init[][0]); else alias Elem = typeof(R.init[].opIndex (0)); } void main () { alias T = Proxy!Test; pragma (msg, Elem!T); } /* dmd git-HEAD outputs this: source/app.d(11): Error: dereference of null pointer 'this.ptr' source/app.d(31): called from here: Proxy(null).deref() source/app.d(37): Error: template instance app.Elem!(Proxy!(Test)) error instantiating source/app.d(37): while evaluating pragma(msg, Elem!(Proxy!(Test))) FAIL .dub/build/application-debug-linux.posix-x86_64-dmd_2067-905D3FE7D130796D902AA401E263BCF6/ testing executable Error executing command run: dmd failed with exit code 1. */ --
Feb 10 2015