Files
Nim/tests/ccgbugs
Ryan McConnell 33ee586913 fixes #11797; fix C type hashes for imported aliases (#26150)
Fixes #11797.

Imported scalar and pointer aliases inherit their external C spelling,
but
receive a different Nim symbol. Signature hashing previously used that
symbol
identity, so aliases that emit exactly the same C type could produce
different
  backend names for tuples, sequences, and other generic types.

  For example, `cint` and `type CIntAlias = cint` both emit `int`, but
`seq[cint]` and `seq[CIntAlias]` could be emitted as incompatible C
structs.
The Nim type checker nevertheless permits assignments and calls between
them,
  causing the generated C or C++ compilation to fail.

This changes the backend hash to use the external type spelling when
available.
A symbol-based fallback remains for imported types without a resolved
spelling.

The change deliberately does not collapse imported types into their
underlying
Nim builtin. Types such as `pid_t`, imported pointers with qualifiers,
and
  platform typedefs may require distinct backend representations.

  ## NIF and incremental compilation

This does not change NIF serialization, NIF type keys, or the IC cache
format.
The bug is in backend type-name generation. An IC regression test is
included
to ensure that the corrected backend identity is preserved when
compilation
  passes through the NIF pipeline.

  ## Tests

  The regressions cover:

- tuple and sequence assignments between an imported type and its alias
  - cross-module sequence parameters and mutation
  - C and C++ backends
  - NIF-backed incremental compilation

  Existing C-type tests were also run under C/C++, refc, and ARC.

  ## Remaining scope

This does not solve the broader question of compatibility between
imported and
  builtin types that have different backend identities, such as
  `seq[cdouble]` and `seq[float]`. That remains tracked by #19374.
2026-08-28 22:33:20 +02:00
..
2018-08-12 20:43:30 +02:00
2018-03-23 13:28:22 +01:00
2021-11-12 11:19:24 +01:00
2021-02-08 09:46:07 +01:00
2018-12-11 21:23:22 +01:00
2018-12-11 21:23:22 +01:00
2018-09-28 09:59:45 +02:00
2019-05-06 09:34:03 +02:00
2021-01-11 18:02:32 +01:00
2021-09-14 19:40:42 +02:00
2020-11-18 07:56:31 +00:00
2021-03-02 19:41:55 +08:00
2019-11-05 11:05:46 +01:00
2015-04-11 10:01:13 +02:00
2016-08-09 14:16:26 +02:00
2024-12-13 19:30:53 +08:00
2016-06-02 17:23:39 +02:00
2022-09-23 13:05:05 +02:00
2021-09-14 19:39:55 +02:00
2016-09-07 08:29:45 +02:00
2018-12-11 21:23:22 +01:00
2022-09-23 13:05:05 +02:00
2021-01-22 13:14:28 +01:00
2021-03-11 14:03:25 +01:00
2016-01-30 15:45:45 +01:00
2020-11-26 20:00:31 +01:00
2022-09-23 13:05:05 +02:00
2019-06-26 23:15:58 +02:00
2017-02-09 01:16:43 +01:00
2015-03-24 23:07:19 +01:00
2017-11-19 00:37:36 +01:00
2018-03-16 15:32:01 +01:00
2024-11-21 23:50:49 +08:00
2016-03-29 21:44:42 +02:00
2019-05-05 16:08:16 +02:00
2016-07-19 15:40:21 +02:00
2016-04-19 12:10:48 +02:00
2015-10-06 15:51:00 +02:00
2017-02-26 17:41:00 +01:00
2016-08-24 11:48:21 +02:00
2019-05-10 11:43:58 +02:00
2019-05-06 09:34:03 +02:00
2019-05-06 09:34:03 +02:00
2019-05-06 09:34:03 +02:00
2019-05-06 09:34:03 +02:00
2019-05-06 09:34:03 +02:00