[Issue 21196] New: [REG 2.092] Deprecation for language feature triggered inside of deprecated block

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Aug 25 08:18:14 UTC 2020


https://issues.dlang.org/show_bug.cgi?id=21196

          Issue ID: 21196
           Summary: [REG 2.092] Deprecation for language feature triggered
                    inside of deprecated block
           Product: D
           Version: D2
          Hardware: All
                OS: Linux
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: pro.mathias.lang at gmail.com

```
deprecated void appendSlices ( Types ... ) ( ref void[][] slices, ref Types x )
{
    foreach (i, T; Types)
    {
        static if (is(T Element: Element[]))
        {
            static if (is(T == Element[]))
            {
                slices ~= (cast(void*)(&x[i]))[0 .. size_t.sizeof];
            }
            // Append a slice to the array content.
            slices ~= x[i];
        }
        else
        {
            slices ~= (cast(void*)(&x[i]))[0 .. x[i].sizeof];
        }
    }
}

deprecated unittest
{
    void[][] slices;
    char[] str = "Hello World!".dup;
    appendSlices(slices, str);
}
```

Compiled with `dmd -unittest -main foo.d`:

```
Up to      2.062  : Failure with output: Error: unrecognized switch '-main'
2.063   to 2.089.1: Success and no output
2.090.1 to 2.091.1: Success with output: 1 unittests passed


Since      2.092.1: Success with output:
-----
onlineapp.d(9): Deprecation: copying `(cast(void*)&_param_1)[0..8]` into
allocated memory escapes a reference to parameter variable `_param_1`
1 unittests passed
-----
```

--


More information about the Digitalmars-d-bugs mailing list