New comment by pullmoll on void-packages repository https://github.com/void-linux/void-packages/issues/11663#issuecomment-493635699 Comment: Interesting detail for the [Red Hat Bugzilla – Bug 1708315](https://bugzilla.redhat.com/show_bug.cgi?id=1708315): ~~If I look at Void's `gcc-8.3.0` built `linux4.19-4.19.44_1` module `bcache.ko` there is no symbol `bch_bkey_dump` **at all**. Compiled with `gcc-9.1.0` that symbol is indeed there in the `bcache.ko`.~~ You can inspect both using e.g. `Cutter` which is what I did. **Correction:** the symbol is there in both modules if I look at it with `objdump --disassemble=bch_bkey_dump bcache.ko`, however `Cutter` does not load or resolve it for the module built with `gcc-8.3.0` so the guesswork following is to be taken with a grain of salt. Since the function `bch_bkey_dump` is `static` it looks as if `gcc-8.3.0` has optimized it away because it decided the condition when it would be called will never occur. `gcc-9.1.0` OTOH decided to include it and, as we can see in the above bugreport, it is indeed called. I think the problem could be a result of different handling of partially initialized structs between gcc8 and gcc9 and in this specific case the two declarations of ``` extern const struct btree_keys_ops bch_btree_keys_ops; extern const struct btree_keys_ops bch_extent_keys_ops; ``` which can be found in `drivers/md/bcache/extents.h`. In the file `drivers/md/bcache/extents.c` the `const struct btree_keys_ops bch_btree_keys_ops = {…` defines just some of the fields and, specifically **not** the `is_extents = false,` which would apply here. In the `const struct btree_keys_ops bch_extents_keys_ops = {…` more fields are initialized (all?) and `.is_extents = true` is there. I don't know what happens to an unspecified struct member of type bool. My guess is the default initialization value should be `false` but is this really how it is?