Hi! | On 7/16/21 11:42 AM, Thomas Schwinge wrote: |> On 2021-07-09T17:11:25-0600, Martin Sebor via Gcc-patches wrote: |>> The attached tweak avoids the new -Warray-bounds instances when |>> building libatomic for arm. Christophe confirms it resolves |>> the problem (thank you!) |> |> As Abid has just reported in |> , similar |> problem with GCN target libgomp build: |> |> In function ‘gcn_thrs’, |> inlined from ‘gomp_thread’ at [...]/source-gcc/libgomp/libgomp.h:803:10, |> inlined from ‘GOMP_barrier’ at [...]/source-gcc/libgomp/barrier.c:34:29: |> [...]/source-gcc/libgomp/libgomp.h:792:10: error: array subscript 0 is outside array bounds of ‘__lds struct gomp_thread * __lds[0]’ [-Werror=array-bounds] |> 792 | return *thrs; |> | ^~~~~ |> |> gcc/config/gcn/gcn.h: c_register_addr_space ("__lds", ADDR_SPACE_LDS); \ |> |> libgomp/libgomp.h-static inline struct gomp_thread *gcn_thrs (void) |> libgomp/libgomp.h-{ |> libgomp/libgomp.h- /* The value is at the bottom of LDS. */ |> libgomp/libgomp.h: struct gomp_thread * __lds *thrs = (struct gomp_thread * __lds *)4; |> libgomp/libgomp.h- return *thrs; |> libgomp/libgomp.h-} |> |> ..., plus a few more. Work-around: |> |> struct gomp_thread * __lds *thrs = (struct gomp_thread * __lds *)4; |> +# pragma GCC diagnostic push |> +# pragma GCC diagnostic ignored "-Warray-bounds" |> return *thrs; |> +# pragma GCC diagnostic pop |> |> ..., but it's a bit tedious to add that in all that the other places, |> too. Wasn't so bad after all; a lot of duplicates due to 'libgomp.h'. I've thus pushed "[gcn] Work-around libgomp 'error: array subscript 0 is outside array bounds of ‘__lds struct gomp_thread * __lds[0]’ [-Werror=array-bounds]' [PR101484]" to master branch in commit 9f2bc5077debef2b046b6c10d38591ac324ad8b5, see attached. |> (So I'll consider some GCN-specific '-Wno-array-bounds' if we don't |> get to resolve this otherwise, soon.) Now: "Awaiting a different solution, of course." ;-) On 2021-07-17T23:28:45+0100, Andrew Stubbs wrote: > On 16/07/2021 18:42, Thomas Schwinge wrote: >> Of course, we may simply re-work the libgomp/GCN code -- but don't we >> first need to answer the question whether the current code is actually >> "bad"? Aren't we going to get a lot of similar reports from >> kernel/embedded/other low-level software developers, once this is out in >> the wild? I mean: > > GCN already uses address 4 for this value because address 0 caused > problems with null-pointer checks. Ugh. How much wasted bytes per what is that? (I haven't looked yet; hopefully not per GPU thread?) Because: > It really ought not be this hard. :-( I'm sure we can avoid that. Grüße Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955