arphaman added a comment.

In https://reviews.llvm.org/D41405#960008, @george.burgess.iv wrote:

> LGTM assuming my nit gets addressed.
>
> Thank you!
>
> > Maybe someone who's more familiar with this builtin could point to the 
> > cause of this discrepancy
>
> Yeah, the documentation for this builtin is pretty sparse. My guess: clang 
> assumes that the array's size is unknown because it's both an array and at 
> the end of a struct. This exists because code will do clever things like
>
>   struct string {
>     size_t len;
>     char buf[1]; // actual string is accessed from here; `string` just gets 
> overallocated to hold it all.
>   };
>
>
> in FreeBSD-land, they also recommend overallocation with sockaddrs, which 
> have a 14-length trailing element: 
> https://www.freebsd.org/doc/en/books/developers-handbook/sockets-essential-functions.html
>
> ...So, the best compatible heuristic we've been able to settle on here, 
> sadly, is "are we touching the final element in a struct, and is that element 
> an array?" On the bright side, clang failing just means LLVM gets to try to 
> figure it out, so only some hope of getting a useful answer is lost. :)
>
> It's interesting that GCC tries to do better here, since AIUI it has a 
> similar heuristic meant to cope with code like the above.


Thanks!



================
Comment at: test/Sema/builtin-object-size.c:105
+void rd36094951_IAS_builtin_object_size_assertion(IncompleteArrayStruct* p) {
+   __builtin___strlcpy_chk (p->session[0].string, "ab", 2, 
__builtin_object_size(p->session[0].string, 1));
+}
----------------
george.burgess.iv wrote:
> vsapsai wrote:
> > Do we execute significantly different code paths when the second 
> > `__builtin_object_size` argument is 0, 2, 3? I think it is worth checking 
> > locally if these values aren't causing an assertion. Not sure about having 
> > such tests permanently, I'll leave it to you as you are more familiar with 
> > the code.
> In this case, only 1 and 3 should be touching the buggy codepath, and they 
> should execute it identically. If 0 and 2 reach there, we have bigger 
> problems, since they shouldn't really be poking around in the designator of 
> the given LValue.
> 
> Since it's presumably only ~10 seconds of copy-pasting, I'd be happy if we 
> added sanity checks for other modes, as well. :)
Sure, I'll test the other modes as well.


Repository:
  rC Clang

https://reviews.llvm.org/D41405



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

Reply via email to