Bug 23913 – __traits(getMember) fails for some C symbols
Status
RESOLVED
Resolution
FIXED
Severity
regression
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2023-05-12T08:11:48Z
Last change time
2023-05-16T12:29:02Z
Keywords
ImportC, pull
Assigned to
No Owner
Creator
Andrej Mitrovic
Comments
Comment #0 by andrej.mitrovich — 2023-05-12T08:11:48Z
This works in v2.102.0 but fails in v2.013.x:
library.c:
```
typedef enum SomeEnum
{
foo = 0,
bar = -10000,
} SomeEnum;
```
mod.d:
```
module mod;
import library;
alias x = __traits(getMember, library, "SomeEnum");
```
```
$ dmd -c library.c mod.d
[1] 28653 illegal hardware instruction (core dumped) dmd -c library.c mod.d
core.exception.AssertError@src/dmd/expressionsem.d(13055): Assertion failure
```
Specifically: https://github.com/dlang/dmd/blob/a45f4e9f43e9fdbf0b666175e5e66b1ce4f561f6/compiler/src/dmd/expressionsem.d#L13054
It seems to only fail for typedef'ed enums like this.
Comment #1 by andrej.mitrovich — 2023-05-12T08:12:41Z
Corrected wrong keyword.
Comment #2 by dlang-bot — 2023-05-14T05:10:17Z
@WalterBright created dlang/dmd pull request #15234 "fix Issue 23913 - __traits(getMember) fails for some C symbols" fixing this issue:
- fix Issue 23913 - __traits(getMember) fails for some C symbols
https://github.com/dlang/dmd/pull/15234
Comment #3 by dlang-bot — 2023-05-16T07:07:28Z
dlang/dmd pull request #15234 "fix Issue 23913 - __traits(getMember) fails for some C symbols" was merged into stable:
- 441885f9e5f329219c7de3a3e98da0ed8912dd20 by Walter Bright:
fix Issue 23913 - __traits(getMember) fails for some C symbols
https://github.com/dlang/dmd/pull/15234
Comment #4 by dlang-bot — 2023-05-16T12:29:02Z
dlang/dmd pull request #15238 "merge stable" was merged into master:
- 16ec7b681bf314b42a685428ce91d3234459405f by Walter Bright:
fix Issue 23913 - __traits(getMember) fails for some C symbols (#15234)
https://github.com/dlang/dmd/pull/15238