[Bug d/112285] New: `in` class parameter with `gdc -fpreview=in` causes ICE

2023-10-30 Thread gcc.gnu.org at webfreak dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112285

Bug ID: 112285
   Summary: `in` class parameter with `gdc -fpreview=in` causes
ICE
   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: ---

```
gdc (GCC) 13.2.1 20230801
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

(from ArchLinux packages)
```

reduced reproduction code:

```
// test.d
struct NativePath
{
}

class Package {
NativePath m_path;

void getSubConfiguration(in Package )
{
}
}
```

CLI:

```
gdc -fpreview=in -freport-bug test.d
```

error:

```
d21: internal compiler error: in layout_aggregate_type, at d/types.cc:562
0x1bceda4 internal_error(char const*, ...)
???:0
0x7bbfc5 fancy_abort(char const*, int, char const*)
???:0
0xa14ad3 build_ctype(Type*)
???:0
0xa234e2 Target::preferPassByRef(Type*)
???:0
0x9d7562 typeSemantic(Type*, Loc const&, Scope*)
???:0
0x8a1c1e DsymbolSemanticVisitor::funcDeclarationSemantic(FuncDeclaration*)
???:0
0x8780f0
_D3dmd7dsymbol14foreachDsymbolFPSQBf4root5array__T5ArrayTCQCeQCd7DsymbolZQxMDFQvZvZv
???:0
0x8869fb DsymbolSemanticVisitor::visit(ClassDeclaration*)
???:0
0x8780f0
_D3dmd7dsymbol14foreachDsymbolFPSQBf4root5array__T5ArrayTCQCeQCd7DsymbolZQxMDFQvZvZv
???:0
0x87c94d DsymbolSemanticVisitor::visit(Module*)
???:0
0x87e9ed dsymbolSemantic(Dsymbol*, Scope*)
???:0
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See  for instructions.
```

[Bug d/112290] New: self-referencing `in` parameter with `-fpreview=in` causes ICE

2023-10-30 Thread gcc.gnu.org at webfreak dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112290

Bug ID: 112290
   Summary: self-referencing `in` parameter with `-fpreview=in`
causes ICE
   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: ---

minial reproduction:

```
// file.d
struct Dependency {
PathEntry* m_value;

bool opEquals(in Dependency ) {
return m_value == m_value;
}
}

struct PathEntry {
string m_name;
}
```

```
gdc -fpreview=in -freport-bug -fdebug -g -Werror -Wall file.d
```

results in errors

```
file.d:9:1: internal compiler error: in get_symbol_decl, at d/decl.cc:1210
9 | struct PathEntry {
  | ^
0x1bceda4 internal_error(char const*, ...)
???:0
0x7bbfc5 fancy_abort(char const*, int, char const*)
???:0
0xa185b3 build_expr(Expression*, bool, bool)
???:0
0xa159da build_decl_tree(Dsymbol*)
???:0
0xa40ba0 build_module_tree(Module*)
???:0
0xa159da build_decl_tree(Dsymbol*)
???:0
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See  for instructions.
```

possibly related to 112285

[Bug d/112291] New: cyclic reference struct with `in` parameter and `-fpreview=in` causes bogus error: overlapping initializer for field ...

2023-10-30 Thread gcc.gnu.org at webfreak dot org via Gcc-bugs
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