Page 1 of 1

after refresh git invalid application of 'sizeof' to incomplete type 'struct __lock'

Posted: Sun Jul 04, 2021 6:25 pm
by zamek42@gmail.com
Hi All,

Today after I've refreshed idf (git pull origin master &
git submodule update) I've tried to compile my application and I've got the following error:

esp-idf/components/newlib/locks.c:240:23: error: invalid application of 'sizeof' to incomplete type 'struct __lock'
_Static_assert(sizeof(struct __lock) >= sizeof(StaticSemaphore_t),

I use debian Linux unstable.

How can I fix this error?

thx,
Zamek

Re: after refresh git invalid application of 'sizeof' to incomplete type 'struct __lock'

Posted: Mon Jul 05, 2021 1:15 am
by ESP_Sprite
Are you sure your toolchain is also up-to-date? It should give you a warning if that's not the case.

Re: after refresh git invalid application of 'sizeof' to incomplete type 'struct __lock'

Posted: Mon Jul 05, 2021 10:18 am
by zamek42@gmail.com
Hello,

There is no problem with tool, but I've reinstalled both esp32 and tools. Unfortunately the problem is exists:

idf.py build
Executing action: all (aliases: build)
Running ninja in directory /home/zamek/current/xxxxx/build
Executing "ninja all"...
[11/1278] Generating ../../partition_table/partition-table.bin
Partition table binary generated. Contents:
*******************************************************************************
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,16K,
otadata,data,ota,0xd000,8K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,2M,
ota_0,app,ota_0,0x210000,2M,
ota_1,app,ota_1,0x410000,2M,
nvs_key,data,nvs_keys,0x610000,4K,
*******************************************************************************
...
Generating binary image from built executable
esptool.py v3.2-dev
Merged 1 ELF section
Generated /home/zamek/current/xxxxx/build/bootloader/bootloader.bin
[91/91] cd /home/zamek/current/xxxxx/build/bootloader/esp-idf/esptool_py && /home/zamek/.espressif/python_env/idf4.3_py3.9_env/bin/python /home/zamek/esp/esp-idf/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x1000 /home/zamek/current/xxxxx/build/bootloader/bootloader.bin

...

FAILED: esp-idf/newlib/CMakeFiles/__idf_newlib.dir/locks.c.obj
/home/zamek/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc -Iconfig -I/home/zamek/esp/esp-idf/components/newlib/platform_include -I/home/zamek/esp/esp-idf/components/newlib/priv_include -I/home/zamek/esp/esp-idf/components/freertos/include -I/home/zamek/esp/esp-idf/components/freertos/port/xtensa/include -I/home/zamek/esp/esp-idf/components/esp_hw_support/include -I/home/zamek/esp/esp-idf/components/esp_hw_support/include/soc -I/home/zamek/esp/esp-idf/components/esp_hw_support/port/esp32/. -I/home/zamek/esp/esp-idf/components/heap/include -I/home/zamek/esp/esp-idf/components/log/include -I/home/zamek/esp/esp-idf/components/lwip/include/apps -I/home/zamek/esp/esp-idf/components/lwip/include/apps/sntp -I/home/zamek/esp/esp-idf/components/lwip/lwip/src/include -I/home/zamek/esp/esp-idf/components/lwip/port/esp32/include -I/home/zamek/esp/esp-idf/components/lwip/port/esp32/include/arch -I/home/zamek/esp/esp-idf/components/soc/include -I/home/zamek/esp/esp-idf/components/soc/esp32/. -I/home/zamek/esp/esp-idf/components/soc/esp32/include -I/home/zamek/esp/esp-idf/components/hal/esp32/include -I/home/zamek/esp/esp-idf/components/hal/include -I/home/zamek/esp/esp-idf/components/hal/platform_port/include -I/home/zamek/esp/esp-idf/components/esp_rom/include -I/home/zamek/esp/esp-idf/components/esp_rom/esp32 -I/home/zamek/esp/esp-idf/components/esp_rom/include/esp32 -I/home/zamek/esp/esp-idf/components/esp_common/include -I/home/zamek/esp/esp-idf/components/esp_system/include -I/home/zamek/esp/esp-idf/components/esp_system/port/soc -I/home/zamek/esp/esp-idf/components/esp_system/port/public_compat -I/home/zamek/esp/esp-idf/components/esp32/include -I/home/zamek/esp/esp-idf/components/driver/include -I/home/zamek/esp/esp-idf/components/driver/esp32/include -I/home/zamek/esp/esp-idf/components/esp_pm/include -I/home/zamek/esp/esp-idf/components/esp_ringbuf/include -I/home/zamek/esp/esp-idf/components/efuse/include -I/home/zamek/esp/esp-idf/components/efuse/esp32/include -I/home/zamek/esp/esp-idf/components/xtensa/include -I/home/zamek/esp/esp-idf/components/xtensa/esp32/include -I/home/zamek/esp/esp-idf/components/vfs/include -I/home/zamek/esp/esp-idf/components/esp_wifi/include -I/home/zamek/esp/esp-idf/components/esp_event/include -I/home/zamek/esp/esp-idf/components/esp_netif/include -I/home/zamek/esp/esp-idf/components/esp_eth/include -I/home/zamek/esp/esp-idf/components/tcpip_adapter/include -I/home/zamek/esp/esp-idf/components/esp_phy/include -I/home/zamek/esp/esp-idf/components/esp_phy/esp32/include -I/home/zamek/esp/esp-idf/components/app_trace/include -I/home/zamek/esp/esp-idf/components/esp_timer/include -mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -ggdb -Og -fmacro-prefix-map=/home/zamek/current/xxxxx=. -fmacro-prefix-map=/home/zamek/esp/esp-idf=IDF -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -std=gnu99 -Wno-old-style-declaration -D_GNU_SOURCE -DIDF_VER=\"v4.4-dev-1849-g8e3e65a47\" -DESP_PLATFORM -MD -MT esp-idf/newlib/CMakeFiles/__idf_newlib.dir/locks.c.obj -MF esp-idf/newlib/CMakeFiles/__idf_newlib.dir/locks.c.obj.d -o esp-idf/newlib/CMakeFiles/__idf_newlib.dir/locks.c.obj -c /home/zamek/esp/esp-idf/components/newlib/locks.c
/home/zamek/esp/esp-idf/components/newlib/locks.c:240:23: error: invalid application of 'sizeof' to incomplete type 'struct __lock'
_Static_assert(sizeof(struct __lock) >= sizeof(StaticSemaphore_t),
^~~~~~
/home/zamek/esp/esp-idf/components/newlib/locks.c:240:16: error: expression in static assertion is not an integer
_Static_assert(sizeof(struct __lock) >= sizeof(StaticSemaphore_t),
^~~~~~
/home/zamek/esp/esp-idf/components/newlib/locks.c: In function '__retarget_lock_init':
/home/zamek/esp/esp-idf/components/newlib/locks.c:286:11: warning: assignment to '_LOCK_T' {aka 'int'} from 'void *' makes integer from pointer without a cast [-Wint-conversion]
*lock = NULL; /* In case lock's memory is uninitialized */
^
/home/zamek/esp/esp-idf/components/newlib/locks.c: In function '__retarget_lock_init_recursive':
/home/zamek/esp/esp-idf/components/newlib/locks.c:292:11: warning: assignment to '_LOCK_T' {aka 'int'} from 'void *' makes integer from pointer without a cast [-Wint-conversion]
*lock = NULL; /* In case lock's memory is uninitialized */
^
In file included from /home/zamek/esp/esp-idf/components/esp_common/include/esp_err.h:18,
from /home/zamek/esp/esp-idf/components/hal/include/hal/cpu_hal.h:20,
from /home/zamek/esp/esp-idf/components/esp_hw_support/include/esp_cpu.h:22,
from /home/zamek/esp/esp-idf/components/esp_hw_support/include/soc/cpu.h:22,
from /home/zamek/esp/esp-idf/components/newlib/locks.c:19:
/home/zamek/esp/esp-idf/components/newlib/locks.c: In function 'check_lock_nonzero':
/home/zamek/esp/esp-idf/components/newlib/locks.c:309:17: warning: comparison between pointer and integer
assert(lock != NULL && "Uninitialized lock used");
^~
/home/zamek/esp/esp-idf/components/newlib/platform_include/assert.h:44:42: note: in definition of macro 'assert'
#define assert(__e) (__builtin_expect(!!(__e), 1) ? (void)0 : __assert_func (__FILE__, __LINE__, \
^~~
[567/1278] Building C object esp-idf/freertos/CMakeFiles/__idf_freertos.dir/tasks.c.obj
ninja: build stopped: subcommand failed.
ninja failed with exit code 1

Re: after refresh git invalid application of 'sizeof' to incomplete type 'struct __lock'

Posted: Mon Jul 05, 2021 10:31 am
by zamek42@gmail.com
hi,

It solved like this: I had to remove whole build directory and idf.py build.

thx,
Zamek

Re: after refresh git invalid application of 'sizeof' to incomplete type 'struct __lock'

Posted: Wed Jul 07, 2021 10:37 am
by bbinet
Same issue here.
Even after removing the whole build directory, idf.py build will continue to generate the same error:

Code: Select all

/home/bruno/dev/esp/esp-idf/components/newlib/locks.c:240:23: error: invalid application of 'sizeof' to incomplete type 'struct __lock'
 _Static_assert(sizeof(struct __lock) >= sizeof(StaticSemaphore_t),
                       ^~~~~~
/home/bruno/dev/esp/esp-idf/components/newlib/locks.c:240:16: error: expression in static assertion is not an integer
 _Static_assert(sizeof(struct __lock) >= sizeof(StaticSemaphore_t),
                ^~~~~~
/home/bruno/dev/esp/esp-idf/components/newlib/locks.c: In function '__retarget_lock_init':
/home/bruno/dev/esp/esp-idf/components/newlib/locks.c:286:11: warning: assignment to '_LOCK_T' {aka 'int'} from 'void *' makes integer from pointer without a cast [-Wint-conversion]
     *lock = NULL;  /* In case lock's memory is uninitialized */
           ^
/home/bruno/dev/esp/esp-idf/components/newlib/locks.c: In function '__retarget_lock_init_recursive':
/home/bruno/dev/esp/esp-idf/components/newlib/locks.c:292:11: warning: assignment to '_LOCK_T' {aka 'int'} from 'void *' makes integer from pointer without a cast [-Wint-conversion]
     *lock = NULL;  /* In case lock's memory is uninitialized */
           ^
In file included from /home/bruno/dev/esp/esp-idf/components/esp_common/include/esp_err.h:18,
                 from /home/bruno/dev/esp/esp-idf/components/hal/include/hal/cpu_hal.h:20,
                 from /home/bruno/dev/esp/esp-idf/components/esp_hw_support/include/esp_cpu.h:22,
                 from /home/bruno/dev/esp/esp-idf/components/esp_hw_support/include/soc/cpu.h:22,
                 from /home/bruno/dev/esp/esp-idf/components/newlib/locks.c:19:
/home/bruno/dev/esp/esp-idf/components/newlib/locks.c: In function 'check_lock_nonzero':
/home/bruno/dev/esp/esp-idf/components/newlib/locks.c:309:17: warning: comparison between pointer and integer
     assert(lock != NULL && "Uninitialized lock used");
                 ^~
/home/bruno/dev/esp/esp-idf/components/newlib/platform_include/assert.h:44:42: note: in definition of macro 'assert'
 #define assert(__e) (__builtin_expect(!!(__e), 1) ? (void)0 : __assert_func (__FILE__, __LINE__, \
                                          ^~~
[568/1150] Building C object esp-idf/freertos/CMakeFiles/__idf_freertos.dir/tasks.c.obj
ninja: build stopped: subcommand failed.
ninja failed with exit code 1


Re: after refresh git invalid application of 'sizeof' to incomplete type 'struct __lock'

Posted: Thu Jul 08, 2021 10:39 am
by ESP_igrr
This issue is related to using the older version of the toolchain (esp2020-r3) with newer version of ESP-IDF that requires esp2021-r1 toolchain.

If you see the following in the error log:
/home/zamek/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Then esp-2020r3 toolchain is being used.

Please follow the steps below to resolve this (assuming you are using Linux):

1. go to esp-idf directory and run install.sh script (./install.sh). It should say that esp2021-r1 toolchain is either being downloaded, or is already downloaded.
2. source the export script (. ./export.sh).
3. run "xtensa-esp32-elf-gcc --version" to confirm that esp2021-r1 toolchain is now being used
4. go to your project directory and run "idf.py fullclean". This will clear the CMake cache file, that records the toolchain being used
5. build the project again