Prabhuk wrote: > Why? Clang still supports K&R C functions, so this seems wrong at least in > some language modes (it makes sense in C++ or C23 and later).
Thanks for the question @AaronBallman. This is my thinking behind this change. Though Clang supports K&R C functions without prototypes, the -fexperimental-call-graph-section feature requires us to emit a concrete, mangled type ID of the "target" function for every call site. When we encounter an indirect call to a no-prototype function, we don't have a concrete signature to derive this type ID from. So, I am falling back to generating the metadata as if it were a zero-parameter function (e.g., _ZTSFvE in Itanium). Since this fallback causes a possible loss of accuracy/precision and means the call site's type ID might not match the actual target's type ID, I am emitting a specific warning. If this was an oversight by the developer to not declare the arg list as "(void)" they can correct it. But for the general case, I do not know how to generate the precise "target" type ID without prototype though this is something I would like to address in the future. Currently, these cases crash when `-fexperimental-call-grah-section` flag is set which make this feature unusable due to this corner case. https://github.com/llvm/llvm-project/pull/210846 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
