Consistent bugs with dmd -O -inline in a large project

Chris via Digitalmars-d digitalmars-d at puremagic.com
Thu Oct 16 06:35:53 PDT 2014


On Thursday, 16 October 2014 at 11:54:09 UTC, Chris wrote:
>
> Ok, I've found the flaw in my program. It's code that was left 
> over after refactoring some modules. It looks like this 
> (simplified):
>
> I import a module and access an enum in that module. However, I 
> never use the accessed element
>
> module politician.answer;
>
> enum { Statement = "Blah" }
>
> mixin template PressConference {
>   int STATEMENT_LEN;
>   // ...
> }
>
> -------------
>
> module press.article;
>
> mixin PressConference;
> this() {
>   STATEMENT_LEN = Statement.length;  // Not good! Left over 
> code from refactoring.
> }
>
> Even worse, I never use STATEMENT_LEN in this class. The whole 
> logic is non-sense and is due to my not cleaning up the 
> constructor.
>
> So the optimizer optimized this away, seeing that it is never 
> used, but it is still accessed in the class constructor.
>
> My question now is, shouldn't the optimizer have noticed that 
> it is still being accessed? Or what did the optimizer actually 
> do.
>
> This helped me to find "dead code" at least.

Update on the above. I actually do use the variable STATEMENT_LEN 
later in the mixed in code. This escapes the optimizer.

mixin template PressConference {
   int STATEMENT_LEN;
   // ...
   void someFunction() {
     // uses STATEMENT_LEN
   }
}

Hm.


More information about the Digitalmars-d mailing list