rmaz added a comment.

In D133586#3809475 <https://reviews.llvm.org/D133586#3809475>, @aaron.ballman 
wrote:

> This is why I'm wondering how we're hitting this problem in the first place. 
> C++ shouldn't be able to create a function without a prototype so why does 
> the ODR hash matter (do we use that in C and I just wasn't aware of it)?

The ODR hash matters because it is serialized in PCM output, regardless of 
which function type it is:

https://github.com/llvm/llvm-project/blob/main/clang/lib/AST/ODRHash.cpp#L889-L908

Leaving the `FastTypeQuals` uninitialized can lead to non-deterministic values 
of the ODR hash, and so the serialized module output. With enough leading 0s 
this can lead to a size change in the PCM file, which will start to fail builds 
due to a size mismatch during PCM validation.

Some alternative approaches could be:

- don't call these methods in `VisitFunctionNoProtoType` (and audit other 
callsites)
- remove these methods from `FunctionNoProtoType`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133586/new/

https://reviews.llvm.org/D133586

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to