[Issue 3233] final switch could skip bounds checking in release mode
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Dec 19 01:59:50 UTC 2020
https://issues.dlang.org/show_bug.cgi?id=3233
--- Comment #1 from ponce <aliloko at gmail.com> ---
For example:
See godbolt output in https://d.godbolt.org/z/7x3Ehd
--------------- switch.d ---------------------
enum LOL
{
a, b, c
}
import core.stdc.stdio;
void dosmthg(LOL l)
{
assert(l >= LOL.a);
assert(l <= LOL.c);
final switch(l) with (LOL)
{
case a: printf("hello");
case b: printf("world");
case c: printf("!!!!");
}
}
----------------------------------------------
The final switch always has a default case that call core.internal.switch_error
I'm not really if this is a good thing or not.
On one hand, it's like a enabled-on-release assertion so a good idea.
On the other hand, it's one more test in a final switch that could assume all
values are inside range. Maybe it's better to err on the side of safe.
--
More information about the Digitalmars-d-bugs
mailing list