jerryscript-project / jerryscript

Ultra-lightweight JavaScript engine for the Internet of Things.
https://jerryscript.net
Apache License 2.0
6.89k stars 669 forks source link

Build failed with clang 3.8: error: missing field 'id' initializer [-Werror,-Wmissing-field-initializers] #5020

Open zalsaeed opened 1 year ago

zalsaeed commented 1 year ago

Brief Description & Steps

Failed to build on Debian with Clang 3.8. In the same environment the build succeeds with cc/gcc, but not with the version of clang used . This is the error I'm getting error: missing field 'id' initializer [-Werror,-Wmissing-field-initializers] on ecma-builtin-typedarray-prototype.c:1922:37. Below is the full detail of the error and how to regenerate it.

JerryScript revision

368641043fc9580400a179669f9b45782db90538

Build platform

Build steps

CC=clang python tools/build.py --debug --verbose --clean 

Partial Build Stdout

[ 60%] Building C object jerry-core/CMakeFiles/jerry-core.dir/ecma/builtin-objects/typedarray/ecma-builtin-uint16array-prototype.c.o
cd /home/jerryscript/build/jerry-core && /usr/bin/clang  -DJERRY_CPOINTER_32_BIT=0 -DJERRY_DEBUGGER=0 -DJERRY_ERROR_MESSAGES=0 -DJERRY_EXTERNAL_CONTEXT=0 -DJERRY_FUNCTION_TO_STRING=0 -DJERRY_GC_LIMIT="(0)" -DJERRY_GC_MARK_LIMIT="(8)" -DJERRY_GLOBAL_HEAP_SIZE="(512)" -DJERRY_LINE_INFO=0 -DJERRY_LOGGING=0 -DJERRY_MEM_GC_BEFORE_EACH_ALLOC=0 -DJERRY_MEM_STATS=0 -DJERRY_PARSER=1 -DJERRY_PARSER_DUMP_BYTE_CODE=0 -DJERRY_PROMISE_CALLBACK=0 -DJERRY_REGEXP_DUMP_BYTE_CODE=0 -DJERRY_REGEXP_STRICT_MODE=0 -DJERRY_SNAPSHOT_EXEC=0 -DJERRY_SNAPSHOT_SAVE=0 -DJERRY_STACK_LIMIT="(0)" -DJERRY_SYSTEM_ALLOCATOR=0 -DJERRY_VALGRIND=0 -DJERRY_VM_HALT=0 -DJERRY_VM_THROW=0 -I/home/jerryscript/jerry-core/include -I/home/jerryscript/jerry-core -I/home/jerryscript/jerry-core/api -I/home/jerryscript/jerry-core/debugger -I/home/jerryscript/jerry-core/ecma/base -I/home/jerryscript/jerry-core/ecma/builtin-objects -I/home/jerryscript/jerry-core/ecma/builtin-objects/typedarray -I/home/jerryscript/jerry-core/ecma/operations -I/home/jerryscript/jerry-core/jcontext -I/home/jerryscript/jerry-core/jmem -I/home/jerryscript/jerry-core/jrt -I/home/jerryscript/jerry-core/lit -I/home/jerryscript/jerry-core/parser/js -I/home/jerryscript/jerry-core/parser/regexp -I/home/jerryscript/jerry-core/vm  -flto -std=c99 -pedantic -Wall -Werror=all -Wextra -Werror=extra -Wformat-nonliteral -Werror=format-nonliteral -Winit-self -Werror=init-self -Wsign-conversion -Werror=sign-conversion -Wformat-security -Werror=format-security -Wmissing-declarations -Werror=missing-declarations -Wshadow -Werror=shadow -Wstrict-prototypes -Werror=strict-prototypes -Wundef -Werror=undef -Wold-style-definition -Werror=old-style-definition -Wconversion -Werror=conversion -Wno-stack-protector -Wno-attributes -Werror -Wno-nested-anon-types -Wno-static-in-inline -g   -o CMakeFiles/jerry-core.dir/ecma/builtin-objects/typedarray/ecma-builtin-uint16array-prototype.c.o   -c /home/jerryscript/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint16array-prototype.c
/home/jerryscript/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c:1922:37: error: missing field 'id' initializer [-Werror,-Wmissing-field-initializers]
  ecma_typedarray_info_t info = { 0 };
                                    ^
1 error generated.
[ 61%] Building C object jerry-core/CMakeFiles/jerry-core.dir/ecma/builtin-objects/typedarray/ecma-builtin-uint32array-prototype.c.o
jerry-core/CMakeFiles/jerry-core.dir/build.make:3065: recipe for target 'jerry-core/CMakeFiles/jerry-core.dir/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c.o' failed
make[2]: *** [jerry-core/CMakeFiles/jerry-core.dir/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c.o] Error 1
make[2]: *** Waiting for unfinished jobs....
cd /home/jerryscript/build/jerry-core && /usr/bin/clang  -DJERRY_CPOINTER_32_BIT=0 -DJERRY_DEBUGGER=0 -DJERRY_ERROR_MESSAGES=0 -DJERRY_EXTERNAL_CONTEXT=0 -DJERRY_FUNCTION_TO_STRING=0 -DJERRY_GC_LIMIT="(0)" -DJERRY_GC_MARK_LIMIT="(8)" -DJERRY_GLOBAL_HEAP_SIZE="(512)" -DJERRY_LINE_INFO=0 -DJERRY_LOGGING=0 -DJERRY_MEM_GC_BEFORE_EACH_ALLOC=0 -DJERRY_MEM_STATS=0 -DJERRY_PARSER=1 -DJERRY_PARSER_DUMP_BYTE_CODE=0 -DJERRY_PROMISE_CALLBACK=0 -DJERRY_REGEXP_DUMP_BYTE_CODE=0 -DJERRY_REGEXP_STRICT_MODE=0 -DJERRY_SNAPSHOT_EXEC=0 -DJERRY_SNAPSHOT_SAVE=0 -DJERRY_STACK_LIMIT="(0)" -DJERRY_SYSTEM_ALLOCATOR=0 -DJERRY_VALGRIND=0 -DJERRY_VM_HALT=0 -DJERRY_VM_THROW=0 -I/home/jerryscript/jerry-core/include -I/home/jerryscript/jerry-core -I/home/jerryscript/jerry-core/api -I/home/jerryscript/jerry-core/debugger -I/home/jerryscript/jerry-core/ecma/base -I/home/jerryscript/jerry-core/ecma/builtin-objects -I/home/jerryscript/jerry-core/ecma/builtin-objects/typedarray -I/home/jerryscript/jerry-core/ecma/operations -I/home/jerryscript/jerry-core/jcontext -I/home/jerryscript/jerry-core/jmem -I/home/jerryscript/jerry-core/jrt -I/home/jerryscript/jerry-core/lit -I/home/jerryscript/jerry-core/parser/js -I/home/jerryscript/jerry-core/parser/regexp -I/home/jerryscript/jerry-core/vm  -flto -std=c99 -pedantic -Wall -Werror=all -Wextra -Werror=extra -Wformat-nonliteral -Werror=format-nonliteral -Winit-self -Werror=init-self -Wsign-conversion -Werror=sign-conversion -Wformat-security -Werror=format-security -Wmissing-declarations -Werror=missing-declarations -Wshadow -Werror=shadow -Wstrict-prototypes -Werror=strict-prototypes -Wundef -Werror=undef -Wold-style-definition -Werror=old-style-definition -Wconversion -Werror=conversion -Wno-stack-protector -Wno-attributes -Werror -Wno-nested-anon-types -Wno-static-in-inline -g   -o CMakeFiles/jerry-core.dir/ecma/builtin-objects/typedarray/ecma-builtin-uint32array-prototype.c.o   -c /home/jerryscript/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-uint32array-prototype.c

Dockerfile to Rebuild the same Environment

Dockerfile
FROM debian:9.8

RUN apt-get update
RUN apt-get install -y --no-install-recommends \
    build-essential \
    make \
    cmake \
    git \
    curl \
    vim \
    wget \ 
    ca-certificates \
    python \ 
    clang

WORKDIR /home
RUN git clone https://github.com/jerryscript-project/jerryscript.git
Build Docker Image
docker build -t jerryscript:latest .
Run Docker Container
docker run --name js -it jerryscript /bin/bash

Complete Log

CMakeOutput.log
The system is: Linux - 5.10.104-linuxkit - x86_64
Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
Compiler: /usr/bin/clang 
Build flags: 
Id flags: 

The output was:
0

Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"

The C compiler identification is Clang, found in "/home/jerryscript/build/CMakeFiles/3.7.2/CompilerIdC/a.out"

Determining if the C compiler works passed with the following output:
Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_0be26/fast"
/usr/bin/make -f CMakeFiles/cmTC_0be26.dir/build.make CMakeFiles/cmTC_0be26.dir/build
make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_0be26.dir/testCCompiler.c.o
/usr/bin/clang     -o CMakeFiles/cmTC_0be26.dir/testCCompiler.c.o   -c /home/jerryscript/build/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTC_0be26
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0be26.dir/link.txt --verbose=1
/usr/bin/clang       CMakeFiles/cmTC_0be26.dir/testCCompiler.c.o  -o cmTC_0be26 -rdynamic 
make[1]: Leaving directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'

Detecting C compiler ABI info compiled with the following output:
Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_e80a4/fast"
/usr/bin/make -f CMakeFiles/cmTC_e80a4.dir/build.make CMakeFiles/cmTC_e80a4.dir/build
make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o
/usr/bin/clang     -o CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o   -c /usr/share/cmake-3.7/Modules/CMakeCCompilerABI.c
Linking C executable cmTC_e80a4
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e80a4.dir/link.txt --verbose=1
/usr/bin/clang      -v CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o  -o cmTC_e80a4 -rdynamic  
clang version 3.8.1-24 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.3.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
 "/usr/bin/ld" -export-dynamic --hash-style=both --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_e80a4 /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../.. -L/usr/lib/llvm-3.8/bin/../lib -L/lib -L/usr/lib CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crtn.o
make[1]: Leaving directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'

Parsed C implicit link information from above output:
  link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)]
  ignore line: [Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp]
  ignore line: []
  ignore line: [Run Build Command:"/usr/bin/make" "cmTC_e80a4/fast"]
  ignore line: [/usr/bin/make -f CMakeFiles/cmTC_e80a4.dir/build.make CMakeFiles/cmTC_e80a4.dir/build]
  ignore line: [make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp']
  ignore line: [Building C object CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o]
  ignore line: [/usr/bin/clang     -o CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o   -c /usr/share/cmake-3.7/Modules/CMakeCCompilerABI.c]
  ignore line: [Linking C executable cmTC_e80a4]
  ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e80a4.dir/link.txt --verbose=1]
  ignore line: [/usr/bin/clang      -v CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o  -o cmTC_e80a4 -rdynamic  ]
  ignore line: [clang version 3.8.1-24 (tags/RELEASE_381/final)]
  ignore line: [Target: x86_64-pc-linux-gnu]
  ignore line: [Thread model: posix]
  ignore line: [InstalledDir: /usr/bin]
  ignore line: [Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0]
  ignore line: [Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.3.0]
  ignore line: [Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0]
  ignore line: [Candidate multilib: .]
  ignore line: [@m64]
  ignore line: [Selected multilib: .]
  ignore line: [@m64]
  link line: [ "/usr/bin/ld" -export-dynamic --hash-style=both --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_e80a4 /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../.. -L/usr/lib/llvm-3.8/bin/../lib -L/lib -L/usr/lib CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crtn.o]
    arg [/usr/bin/ld] ==> ignore
    arg [-export-dynamic] ==> ignore
    arg [--hash-style=both] ==> ignore
    arg [--build-id] ==> ignore
    arg [--eh-frame-hdr] ==> ignore
    arg [-m] ==> ignore
    arg [elf_x86_64] ==> ignore
    arg [-dynamic-linker] ==> ignore
    arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
    arg [-o] ==> ignore
    arg [cmTC_e80a4] ==> ignore
    arg [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crt1.o] ==> ignore
    arg [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crti.o] ==> ignore
    arg [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/crtbegin.o] ==> ignore
    arg [-L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0] ==> dir [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0]
    arg [-L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu] ==> dir [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu]
    arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
    arg [-L/lib/../lib64] ==> dir [/lib/../lib64]
    arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
    arg [-L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../..] ==> dir [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../..]
    arg [-L/usr/lib/llvm-3.8/bin/../lib] ==> dir [/usr/lib/llvm-3.8/bin/../lib]
    arg [-L/lib] ==> dir [/lib]
    arg [-L/usr/lib] ==> dir [/usr/lib]
    arg [CMakeFiles/cmTC_e80a4.dir/CMakeCCompilerABI.c.o] ==> ignore
    arg [-lgcc] ==> lib [gcc]
    arg [--as-needed] ==> ignore
    arg [-lgcc_s] ==> lib [gcc_s]
    arg [--no-as-needed] ==> ignore
    arg [-lc] ==> lib [c]
    arg [-lgcc] ==> lib [gcc]
    arg [--as-needed] ==> ignore
    arg [-lgcc_s] ==> lib [gcc_s]
    arg [--no-as-needed] ==> ignore
    arg [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/crtend.o] ==> ignore
    arg [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu/crtn.o] ==> ignore
  remove lib [gcc]
  remove lib [gcc_s]
  remove lib [gcc]
  remove lib [gcc_s]
  collapse library dir [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0] ==> [/usr/lib/gcc/x86_64-linux-gnu/6.3.0]
  collapse library dir [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
  collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
  collapse library dir [/lib/../lib64] ==> [/lib64]
  collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
  collapse library dir [/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../..] ==> [/usr/lib]
  collapse library dir [/usr/lib/llvm-3.8/bin/../lib] ==> [/usr/lib/llvm-3.8/lib]
  collapse library dir [/lib] ==> [/lib]
  collapse library dir [/usr/lib] ==> [/usr/lib]
  implicit libs: [c]
  implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/6.3.0;/usr/lib/x86_64-linux-gnu;/lib/x86_64-linux-gnu;/lib64;/usr/lib;/usr/lib/llvm-3.8/lib;/lib]
  implicit fwks: []

Detecting C [-std=c11] compiler features compiled with the following output:
Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_1ebef/fast"
/usr/bin/make -f CMakeFiles/cmTC_1ebef.dir/build.make CMakeFiles/cmTC_1ebef.dir/build
make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_1ebef.dir/feature_tests.c.o
/usr/bin/clang    -std=c11 -o CMakeFiles/cmTC_1ebef.dir/feature_tests.c.o   -c /home/jerryscript/build/CMakeFiles/feature_tests.c
Linking C executable cmTC_1ebef
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1ebef.dir/link.txt --verbose=1
/usr/bin/clang       CMakeFiles/cmTC_1ebef.dir/feature_tests.c.o  -o cmTC_1ebef -rdynamic 
make[1]: Leaving directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'

    Feature record: C_FEATURE:1c_function_prototypes
    Feature record: C_FEATURE:1c_restrict
    Feature record: C_FEATURE:1c_static_assert
    Feature record: C_FEATURE:1c_variadic_macros

Detecting C [-std=c99] compiler features compiled with the following output:
Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_37c45/fast"
/usr/bin/make -f CMakeFiles/cmTC_37c45.dir/build.make CMakeFiles/cmTC_37c45.dir/build
make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_37c45.dir/feature_tests.c.o
/usr/bin/clang    -std=c99 -o CMakeFiles/cmTC_37c45.dir/feature_tests.c.o   -c /home/jerryscript/build/CMakeFiles/feature_tests.c
Linking C executable cmTC_37c45
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_37c45.dir/link.txt --verbose=1
/usr/bin/clang       CMakeFiles/cmTC_37c45.dir/feature_tests.c.o  -o cmTC_37c45 -rdynamic 
make[1]: Leaving directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'

    Feature record: C_FEATURE:1c_function_prototypes
    Feature record: C_FEATURE:1c_restrict
    Feature record: C_FEATURE:0c_static_assert
    Feature record: C_FEATURE:1c_variadic_macros

Detecting C [-std=c90] compiler features compiled with the following output:
Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_f0bf5/fast"
/usr/bin/make -f CMakeFiles/cmTC_f0bf5.dir/build.make CMakeFiles/cmTC_f0bf5.dir/build
make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_f0bf5.dir/feature_tests.c.o
/usr/bin/clang    -std=c90 -o CMakeFiles/cmTC_f0bf5.dir/feature_tests.c.o   -c /home/jerryscript/build/CMakeFiles/feature_tests.c
Linking C executable cmTC_f0bf5
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f0bf5.dir/link.txt --verbose=1
/usr/bin/clang       CMakeFiles/cmTC_f0bf5.dir/feature_tests.c.o  -o cmTC_f0bf5 -rdynamic 
make[1]: Leaving directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'

    Feature record: C_FEATURE:1c_function_prototypes
    Feature record: C_FEATURE:0c_restrict
    Feature record: C_FEATURE:0c_static_assert
    Feature record: C_FEATURE:0c_variadic_macros
CMakeError.log
Determining if the function sin exists in the m failed with the following output:
Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_cf8e3/fast"
/usr/bin/make -f CMakeFiles/cmTC_cf8e3.dir/build.make CMakeFiles/cmTC_cf8e3.dir/build
make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_cf8e3.dir/CheckFunctionExists.c.o
/usr/bin/clang    -flto -std=c99 -pedantic -Wall -Werror=all -Wextra -Werror=extra -Wformat-nonliteral -Werror=format-nonliteral -Winit-self -Werror=init-self -Wsign-conversion -Werror=sign-conversion -Wformat-security -Werror=format-security -Wmissing-declarations -Werror=missing-declarations -Wshadow -Werror=shadow -Wstrict-prototypes -Werror=strict-prototypes -Wundef -Werror=undef -Wold-style-definition -Werror=old-style-definition -Wconversion -Werror=conversion -Wno-stack-protector -Wno-attributes -Werror -Wno-nested-anon-types -Wno-static-in-inline -DCHECK_FUNCTION_EXISTS=sin -Wno-error -Wno-error=strict-prototypes   -o CMakeFiles/cmTC_cf8e3.dir/CheckFunctionExists.c.o   -c /usr/share/cmake-3.7/Modules/CheckFunctionExists.c
/usr/share/cmake-3.7/Modules/CheckFunctionExists.c:7:3: warning: incompatible redeclaration of library function 'sin' [-Wincompatible-library-redeclaration]
  CHECK_FUNCTION_EXISTS();
  ^
<command line>:1:31: note: expanded from here
#define CHECK_FUNCTION_EXISTS sin
                              ^
/usr/share/cmake-3.7/Modules/CheckFunctionExists.c:7:3: note: 'sin' is a builtin with type 'double (double)'
<command line>:1:31: note: expanded from here
#define CHECK_FUNCTION_EXISTS sin
                              ^
1 warning generated.
Linking C executable cmTC_cf8e3
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cf8e3.dir/link.txt --verbose=1
/usr/bin/clang   -flto -std=c99 -pedantic -Wall -Werror=all -Wextra -Werror=extra -Wformat-nonliteral -Werror=format-nonliteral -Winit-self -Werror=init-self -Wsign-conversion -Werror=sign-conversion -Wformat-security -Werror=format-security -Wmissing-declarations -Werror=missing-declarations -Wshadow -Werror=shadow -Wstrict-prototypes -Werror=strict-prototypes -Wundef -Werror=undef -Wold-style-definition -Werror=old-style-definition -Wconversion -Werror=conversion -Wno-stack-protector -Wno-attributes -Werror -Wno-nested-anon-types -Wno-static-in-inline -DCHECK_FUNCTION_EXISTS=sin -Wno-error -Wno-error=strict-prototypes    CMakeFiles/cmTC_cf8e3.dir/CheckFunctionExists.c.o  -o cmTC_cf8e3 -rdynamic -lm 
/usr/bin/ld: /usr/lib/llvm-3.8/bin/../lib/LLVMgold.so: error loading plugin: /usr/lib/llvm-3.8/bin/../lib/LLVMgold.so: cannot open shared object file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeFiles/cmTC_cf8e3.dir/build.make:97: recipe for target 'cmTC_cf8e3' failed
make[1]: *** [cmTC_cf8e3] Error 1
make[1]: Leaving directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_cf8e3/fast' failed
make: *** [cmTC_cf8e3/fast] Error 2

Performing C SOURCE FILE Test HAVE_TM_GMTOFF failed with the following output:
Change Dir: /home/jerryscript/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_199e6/fast"
/usr/bin/make -f CMakeFiles/cmTC_199e6.dir/build.make CMakeFiles/cmTC_199e6.dir/build
make[1]: Entering directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_199e6.dir/src.c.o
/usr/bin/clang  -D_BSD_SOURCE -D_DEFAULT_SOURCE  -flto -std=c99 -pedantic -Wall -Werror=all -Wextra -Werror=extra -Wformat-nonliteral -Werror=format-nonliteral -Winit-self -Werror=init-self -Wsign-conversion -Werror=sign-conversion -Wformat-security -Werror=format-security -Wmissing-declarations -Werror=missing-declarations -Wshadow -Werror=shadow -Wstrict-prototypes -Werror=strict-prototypes -Wundef -Werror=undef -Wold-style-definition -Werror=old-style-definition -Wconversion -Werror=conversion -Wno-stack-protector -Wno-attributes -Werror -Wno-nested-anon-types -Wno-static-in-inline -DHAVE_TM_GMTOFF -Wno-error=strict-prototypes -Wno-error=old-style-definition -Wno-error=unused-value   -o CMakeFiles/cmTC_199e6.dir/src.c.o   -c /home/jerryscript/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_199e6
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_199e6.dir/link.txt --verbose=1
/usr/bin/clang   -flto -std=c99 -pedantic -Wall -Werror=all -Wextra -Werror=extra -Wformat-nonliteral -Werror=format-nonliteral -Winit-self -Werror=init-self -Wsign-conversion -Werror=sign-conversion -Wformat-security -Werror=format-security -Wmissing-declarations -Werror=missing-declarations -Wshadow -Werror=shadow -Wstrict-prototypes -Werror=strict-prototypes -Wundef -Werror=undef -Wold-style-definition -Werror=old-style-definition -Wconversion -Werror=conversion -Wno-stack-protector -Wno-attributes -Werror -Wno-nested-anon-types -Wno-static-in-inline -DHAVE_TM_GMTOFF -Wno-error=strict-prototypes -Wno-error=old-style-definition -Wno-error=unused-value    CMakeFiles/cmTC_199e6.dir/src.c.o  -o cmTC_199e6 -rdynamic 
/usr/bin/ld: /usr/lib/llvm-3.8/bin/../lib/LLVMgold.so: error loading plugin: /usr/lib/llvm-3.8/bin/../lib/LLVMgold.so: cannot open shared object file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeFiles/cmTC_199e6.dir/build.make:97: recipe for target 'cmTC_199e6' failed
make[1]: *** [cmTC_199e6] Error 1
make[1]: Leaving directory '/home/jerryscript/build/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_199e6/fast' failed
make: *** [cmTC_199e6/fast] Error 2

Source file was:

#include <time.h>

int main()
{
   (void)sizeof(((struct tm *)0)->tm_gmtoff);
   return 0;
}
zherczeg commented 1 year ago

It looks like you have found a compiler bug. In C, partial initialization of struct is possible, and the uninitialized members are zeroed. So creating a full zero data with = { 0 } is possible regardless of struct.

zalsaeed commented 1 year ago

I see that others were able to build JerryScript with newer versions of clang (thus it seems fixed for newer versions). Clang 3.8 is not going to change. Thus there are two possible fixes here.

Change all the initialization to be explicit with the number of elements in all structs

Luckily there was only two initialization that required changes.

  1. https://github.com/jerryscript-project/jerryscript/blob/368641043fc9580400a179669f9b45782db90538/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c#L1922 The line should be changed to ecma_typedarray_info_t info = { 0,0,0,0,0,0 };
  2. https://github.com/jerryscript-project/jerryscript/blob/368641043fc9580400a179669f9b45782db90538/jerry-core/parser/js/js-parser.c#L2925 The line should be changed to scanner_range_t range = { 0,{0,0,0} };

I didn't put these in a pull request as it would require running tests on several other environments (which I don't have) to ensure it is still compatible. And I'm not actively working on JerryScript. However, feel free to apply them if you find this acceptable.

Suppress (disable) the warnings/errors with Cmake

Unfortunately, I cannot find the proper way to apply such flags with the python build script. Any help here is highly appreciated.


My problem is solved for now. Please feel free to close this issue if the changes are not going to be applied.