f5a00c788a
`ManglerChecker` is a class that verifies that for each IR declaration (except some, see its `needsChecking` property) its mangled name (computed from IR) is the same as the mangled name computed from its frontend representation — `DeclarationDescriptor` on K1 or `FirDeclaration` on K2. The way it does it is as follows. On K1, `ManglerChecker` looks if the declaration has a true, non-IR-based descriptor, it if it does, then it checks it (see ManglerChecker.Companion#hasDescriptor). On K2, since we don’t have any descriptors, `ManglerChecker` looks if the declaration’s metadata property is `null` (because the corresponding `FirDeclaration` is stored there). If it’s not, it checks it (see ManglerChecker.Companion#hasMetadata). The issue is that those two conditions are not equivalent. When the Compose compiler plugin transforms an IR function, it copies its `metadata` property (as it should, because `metadata` can contain anything, not necessarily the frontend representation), but doesn't set the descriptor. Because of that, on K1 that transformed function is skipped in `ManglerChecker`, and on K2 it’s not. The correct usage would be to properly distinguish which declarations come from the FE as is, and which are transformed/synthesized, and skip the latter. But it is unclear how to implement this. For now, the easiest way to fix this on K2 is to not run ManglerChecker at all. KT-60648 ^KT-59448 Fixed