www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21492] New: betterC: TypeInfo is generated for code guarded


          Issue ID: 21492
           Summary: betterC: TypeInfo is generated for code guarded by
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: betterC, CTFE
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: dave287091 gmail.com

Example code that demonstrates the issue, compiled with dmd and the -betterC

DMD64 D Compiler v2.094.2

int bar(){
        int[] foo = [1]; // Error: TypeInfo cannot be used with -betterC
    return 0;

The same code compiles with ldc without issue.

My understanding of the difference between the two compilers is that ldc
doesn’t generate code at all for `if`s that have compile-time known
constant-expressions with no labels. I don’t know how dmd works, but
it is instead relying on the backend optimizing out the dead branch?

In other words, the __ctfe is not treated as a special case by ldc. The same
result is seen with this code, which compiles with ldc but fails with dmd:

int bar(){
        int[] foo = [1];
    return 0;

I’m posting this as an issue as it means that betterC code that compiles with
ldc won’t compile with dmd. betterC is under-specified, so I don’t know if
is being overly-permissive or if dmd is improperly detecting betterC violations
when it attempts to generate code instead of during semantic analysis.

This issue crops up if you want CTFE-able code that calculates something
inefficiently at ctfe while it just calls some external function at runtime.

Dec 19 2020