
So, saying "unused" and then "used" doesn't seem to make any sense.
unused and used attributes do not cancel each other. They have different semantics. I agree this part of the code needs some attention. zero sized arrays are not C compliant as I understand it, even more so when it is declared outside of a struct.
On Wed, Mar 22, 2023 at 4:58 PM Tom Rini trini@konsulko.com wrote:
On Tue, Feb 21, 2023 at 03:33:20PM -0800, Aditya Kumar wrote:
The variable gets dropped by clang compiler in an optimized builds. Adding attribute((used)) allows the symbol to be preserved. Similar changes have been proposed in the past e.g., 569524741a01e1a96fc2b75dd7e5d12e41ce6c2b for ll_entry_declare macro.
Signed-off-by: AdityaK appujee@google.com Reviewed-by: Simon Glass sjg@chromium.org
include/linker_lists.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linker_lists.h b/include/linker_lists.h index d3da9d44e8..4cd13c3bc8 100644 --- a/include/linker_lists.h +++ b/include/linker_lists.h @@ -125,7 +125,7 @@ #define ll_entry_start(_type, _list) \ ({ \ static char start[0] __aligned(CONFIG_LINKER_LIST_ALIGN) \
- __attribute__((unused)) \
- __attribute__((unused)) __attribute__((used)) \ __section("__u_boot_list_2_"#_list"_1"); \ (_type *)&start; \
})
So, saying "unused" and then "used" doesn't seem to make any sense. And given some other problems we see with newer clang, which Simon reports this patch doesn't fully fix, we probably need to give that area a good going over to see what attributes do and don't make sense, really.
-- Tom