https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112291

            Bug ID: 112291
           Summary: cyclic reference struct with `in` parameter and
                    `-fpreview=in` causes bogus error: overlapping
                    initializer for field ...
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: d
          Assignee: ibuclaw at gdcproject dot org
          Reporter: gcc.gnu.org at webfreak dot org
  Target Milestone: ---

minimal reproduction case:

```
// dependency.d
module dependency;

import package_;

struct PackageDependency {
        Dependency spec;
        int anythingEitherBeforeOrAfter;
}

struct Dependency {
}

void getTopologicalPackageList(in Package)
{
}
```

```
// package_.d
module package_;

import dependency;

class Package {
        PackageDependency getAllDependencies()
        {
                return PackageDependency.init;
        }
}
```

CLI:

```
gdc -fpreview=in -I. dependency.d
```

causing:

```
dependency.d:5:1: error: overlapping initializer for field
‘PackageDependency’.‘anythingEitherBeforeOrAfter’
    5 | struct PackageDependency {
      | ^
```

compiling both dependency.d and package_.d in the same CLI causes multiple
errors:

```
dependency.d:5:1: error: overlapping initializer for field
‘PackageDependency’.‘anythingEitherBeforeOrAfter’
    5 | struct PackageDependency {
      | ^
package_.d: In function ‘getAllDependencies’:
package_.d:8:24: error: overlapping initializer for field
‘PackageDependency’.‘anythingEitherBeforeOrAfter’
    8 |                 return PackageDependency.init;
      |                        ^
```

compiling only package_.d alone does not cause any errors.

removing `anythingEitherBeforeOrAfter` makes the error go away

copying package_.d into dependency.d (flattening the import) also makes the
error go away

Reply via email to