On Sunday 18 July 2010 17:36:58 strtr wrote: > > I don't agree with this bug report because of two reasons. > 1. Warnings are supposed to be warnings, not errors. If you want to see > those warnings you'll use -w. > What you probably want is for the dmd to have a -!w flag instead (warnings > by default, disable with flag) > 2. In this particular example, the problem is not that the warning isn't > shown without -w, but that the warning is incorrect and scope(failure) > shouldn't be able to catch the exception. > > Here is a smaller example of the same problem[D1]: > ---- > void main() > { > for(int i=0;i<10;i++) > { > scope(failure){ > writefln("continue"); > continue; > } > //scope(failure) writefln("fail"); > writefln(i); > throw new Exception(format(i)); > } > } > ---- > > Enable warnings and you'll get the same unreachable warning, but which > statement is unreachable as when you compile this without -w it happily > prints all ten i's and continues.
With any other compiler that I've ever used, it prints warnings normally. It may or may not have a way to make then errors, but it will print them normally and compile with them. dmd won't display warnings with -w, but when you use -w, it instantly makes them errors. There needs to be a middle ground where warnings are reported and not flagged as errors. As for unreachable code being an error, that's debatable. Obviously, dmd doesn't consider it one. Personally, I hate the fact that javac does with Java. I _want_ that to be a warning. I'd like to be warned about it, and I don't want it to be in production code, but it happens often enough when developing, that I don't want to have to fix it to get code to compile. As such, a warning makes perfect sense. However, when you combine that with the fact that dmd doesn't even report warnings unless it treats them as errors, it becomes easy to miss. - Jonathan M Davis