Skip to content

Closure compiler warning about useless null; #17939

@oboukli

Description

@oboukli

Closure compiler is warning that the null; line at the begging of JavaScript files is useless. Code won't build with strict compiler flags.

Works fine with emsdk 3.1.22, probably because it uses an older version of the Closure compiler, but not with 3.1.23.

Version of emscripten/emsdk:

docker run emscripten/emsdk emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.23 (5ae63ce7dd955df449cb419bfe5afc51d1bd57f2)
clang version 16.0.0 (https://github.com/llvm/llvm-project 8b587113b746f31b63fd6473083df78cef30a72e)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /emsdk/upstream/bin

Failing command line in full:

Sample code:main.c

#include <stdio.h>

int main() {
  printf("hello, world!\n");
  return 0;
}

Command

docker run \
-v $(pwd):/src \
-v $(pwd)/emscripten_cache:/emsdk/upstream/emscripten/cache \
-v $(pwd)/emscripten_tmp:/tmp \
--workdir=/src emscripten/emsdk \
emcc -v -Wall -Werror -O3 \
--closure 1 \
-s ASSERTIONS=0 \
-s EXPORTED_FUNCTIONS='["_main"]' \
-s STRICT=1 \
-o main.js main.c

Output

 "/emsdk/upstream/bin/clang" --version
 "/emsdk/upstream/bin/clang" -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -Werror=implicit-function-declaration -I/emsdk/upstream/emscripten/cache/sysroot/include/SDL --sysroot=/emsdk/upstream/emscripten/cache/sysroot -Xclang -iwithsysroot/include/compat -v -Wall -Werror -O3 main.c -c -o /tmp/emscripten_temp_bscia4h5/main_0.o
clang version 16.0.0 (https://github.com/llvm/llvm-project 8b587113b746f31b63fd6473083df78cef30a72e)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /emsdk/upstream/bin
 (in-process)
 "/emsdk/upstream/bin/clang-16" -cc1 -triple wasm32-unknown-emscripten -emit-obj --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -v -fcoverage-compilation-dir=/src -resource-dir /emsdk/upstream/lib/clang/16.0.0 -I /emsdk/upstream/emscripten/cache/sysroot/include/SDL -isysroot /emsdk/upstream/emscripten/cache/sysroot -internal-isystem /emsdk/upstream/lib/clang/16.0.0/include -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include -O3 -Werror=implicit-function-declaration -Wall -Werror -fdebug-compilation-dir=/src -ferror-limit 19 -fvisibility=default -fgnuc-version=4.2.1 -fignore-exceptions -vectorize-loops -vectorize-slp -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o /tmp/emscripten_temp_bscia4h5/main_0.o -x c main.c
clang -cc1 version 16.0.0 based upon LLVM 16.0.0git default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
 /emsdk/upstream/emscripten/cache/sysroot/include/SDL
 /emsdk/upstream/emscripten/cache/sysroot/include/compat
 /emsdk/upstream/lib/clang/16.0.0/include
 /emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
 "/emsdk/upstream/bin/wasm-ld" -o main.wasm /tmp/emscripten_temp_bscia4h5/main_0.o -L/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten -lnoexit -lc -ldlmalloc -lcompiler_rt -lsockets --fatal-warnings -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --import-undefined --strip-debug --export-if-defined=main --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=__main_argc_argv --export=stackSave --export=stackRestore --export=stackAlloc --export=__wasm_call_ctors --export=__errno_location --export=__get_temp_ret --export=__set_temp_ret --export-table -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=16777216 --global-base=1024
 "/emsdk/upstream/bin/wasm-emscripten-finalize" --dyncalls-i64 --pass-arg=legalize-js-interface-exported-helpers main.wasm -o main.wasm --detect-features
 "/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/src/compiler.js /tmp/tmpxi0cn2o6.json
 "/emsdk/upstream/bin/wasm-opt" --strip-dwarf --post-emscripten -O3 --low-memory-unused --zero-filled-memory --pass-arg=directize-initial-contents-immutable --strip-debug --strip-producers main.wasm -o main.wasm --mvp-features
 "/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/tools/acorn-optimizer.js /tmp/emscripten_temp_bscia4h5/main.js AJSDCE --closureFriendly
 "/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/tools/acorn-optimizer.js /tmp/emcc_acorn_info_9ysik92g.js emitDCEGraph noPrint --closureFriendly
 "/emsdk/upstream/bin/wasm-metadce" --graph-file=/tmp/emcc_dce_graph_6p5aj3bz.json main.wasm -o main.wasm --mvp-features
 "/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/tools/acorn-optimizer.js /tmp/emcc_acorn_info_q3mi6lll.js applyDCEGraphRemovals --closureFriendly
 "/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/tools/acorn-optimizer.js /tmp/emscripten_temp_bscia4h5/main.js.jso.js.jso.js AJSDCE --closureFriendly
 "/emsdk/upstream/bin/wasm-opt" --strip-dwarf --minify-imports-and-exports-and-modules main.wasm -o main.wasm --mvp-features
 "/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/tools/acorn-optimizer.js /tmp/emcc_acorn_info_bm4m2tez.js applyImportAndExportNameChanges --closureFriendly
 "/emsdk/node/14.18.2_64bit/bin/node" --max_old_space_size=8192 /emsdk/upstream/emscripten/node_modules/.bin/google-closure-compiler --compilation_level ADVANCED_OPTIMIZATIONS --language_in ECMASCRIPT_2020 --language_out NO_TRANSPILE --emit_use_strict=false --externs /emsdk/upstream/emscripten/src/closure-externs/closure-externs.js --externs /emsdk/upstream/emscripten/src/closure-externs/node-externs.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/buffer.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/assert.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/string_decoder.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/os.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/tty.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/domain.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/process.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/readline.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/path.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/vm.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/dgram.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/events.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/util.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/dns.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/zlib.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/punycode.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/url.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/cluster.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/stream.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/repl.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/child_process.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/https.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/querystring.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/net.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/tls.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/fs.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/http.js --externs /emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/core.js --js /tmp/emscripten_temp_bscia4h5/main.js.jso.js.jso.js.jso.js.jso.js --js_output_file tmp12ftzcj7.cc.js
building:ERROR: Closure compiler completed with warnings and -Werror=closure enabled, aborting!

building:ERROR: /tmp/emscripten_temp_bscia4h5/main.js.jso.js.jso.js.jso.js.jso.js:1:0: WARNING - [JSC_USELESS_CODE] Suspicious code. This code lacks side-effects. Is there a bug?
  1| null;
     ^^^^

0 error(s), 1 warning(s), 80.0% typed

building:WARNING: (rerun with -g1 linker flag for an unminified output)
emcc: error: closure compiler produced warnings and -W=error=closure enabled

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions