zygoloid wrote: > When you say that we can't detect what the front-end considers the "closest > surrounding subobject" to be, is that mostly due to corner cases or is it a > more general concern?
It's a more general concern: LLVM simply has no idea what the frontend considers to be a subobject. The LLVM type doesn't carry that information. > ``` > struct suspend_stats { > //... > char failed_devs[REC_FAILED_NUM][40]; > int last_failed_errno; > int bar; > }; > //... > ``` > > Without the change, the last line is: > > ``` > __builtin_dynamic_object_size(foo.failed_devs[argc], 1): 48 > ``` > > Which isn't correct according to GNU's documentation. So if we can't honor > the TYPE bit, then we should return `-1 / 0` here, right? Perhaps according to the GCC documentation as written. But mode 0 and 1 are in general asking for an upper bound on the accessible bytes (that is, an N so any.access beyond N bytes is definitely out of bounds), so it seems to me that returning -1 is strictly worse than returning 48. Do you have a use case for which -1 is a better answer? I suspect the only change we're missing here is a change to our documentation to explicitly say that we give an upper/lower bound when we can't compute an exact size. https://github.com/llvm/llvm-project/pull/78526 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits