digitalmars.D.bugs - [Issue 20148] New: void initializated bool can be both true and false
- d-bugmail puremagic.com (42/42) Aug 20 2019 https://issues.dlang.org/show_bug.cgi?id=20148
https://issues.dlang.org/show_bug.cgi?id=20148 Issue ID: 20148 Summary: void initializated bool can be both true and false Product: D Version: D2 Hardware: All OS: All Status: NEW Keywords: safe Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: ag0aep6g gmail.com This is a spin-off from issue 19968. This program can exhibit undefined behavior even `main` is safe and `f` is correctly trusted: ---- void main() safe { bool b = void; f(b); } void f(bool cond) trusted { import core.stdc.stdlib: free, malloc; byte b; void* p = cond ? &b : malloc(1); if(!cond) free(p); } ---- Typical output: ---- munmap_chunk(): invalid pointer Error: program killed by signal 6 ---- That means `free` is being called on `&b`. That operation has undefined behavior. But that can only happen if `cond` is both true and false at the same time. Surely, an trusted function should be allowed to assume that a bool is either true or false, and not both. --
Aug 20 2019