<feed xmlns='http://www.w3.org/2005/Atom'>
<title>slang.git/tests/language-feature/inheritance/struct-inheritance-import.slang.expected.txt, branch master</title>
<subtitle>Making it easier to work with shaders</subtitle>
<id>https://git.yummers.dev/slang.git/atom?h=master</id>
<link rel='self' href='https://git.yummers.dev/slang.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/'/>
<updated>2021-05-27T20:40:17+00:00</updated>
<entry>
<title>Fix a bug in struct inheritance (#1861)</title>
<updated>2021-05-27T20:40:17+00:00</updated>
<author>
<name>T. Foley</name>
<email>tfoleyNV@users.noreply.github.com</email>
</author>
<published>2021-05-27T20:40:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=63dcc7acf4784d95407866730a70f5d37d391b88'/>
<id>urn:sha1:63dcc7acf4784d95407866730a70f5d37d391b88</id>
<content type='text'>
During lowering from AST to IR, the Slang compiler translates code that uses `struct` inheritance:

```hlsl
struct Base { int a; }
struct Derived : Base {}
```

into code where the inheritance relationship is "witnessed" by a simple field:

```hlsl
struct Base { int a; }
struct Derived { Base __anonymous_field__; }
```

The underlying bug here is that the `__anonymous_field__` that the compiler generated during IR lowering was not being given any linkage decorations (no mangled name). As a result, if multiple separately-compiled modules all access that field they could disagree on its identity as an IR instruction. This could lead to output code being generated where the declaration of `__anonymous_field__` uses one IR instruction, but accesses use another.

This change includes a fix for the issue, and a test that serves as a reproducer for the original problem.</content>
</entry>
</feed>
