Skip to content

Commit f10ba9c

Browse files
authored
re-enable static analysis and fix issues (#44900)
1 parent 7f121e6 commit f10ba9c

File tree

16 files changed

+345
-571
lines changed

16 files changed

+345
-571
lines changed

src/Makefile

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,20 @@ ifeq ($(OS),FreeBSD)
4141
FLAGS += -I$(LOCALBASE)/include
4242
endif
4343

44-
RUNTIME_SRCS := \
44+
SRCS := \
4545
jltypes gf typemap smallintset ast builtins module interpreter symbol \
4646
dlload sys init task array dump staticdata toplevel jl_uv datatype \
47-
simplevector runtime_intrinsics precompile \
47+
simplevector runtime_intrinsics precompile jloptions \
4848
threading partr stackwalk gc gc-debug gc-pages gc-stacks gc-alloc-profiler method \
49-
jlapi signal-handling safepoint timing subtype \
50-
crc32c APInt-C processor ircode opaque_closure codegen-stubs coverage
51-
SRCS := jloptions runtime_ccall rtutils
52-
ifeq ($(OS),WINNT)
53-
SRCS += win32_ucontext
54-
endif
49+
jlapi signal-handling safepoint timing subtype rtutils \
50+
crc32c APInt-C processor ircode opaque_closure codegen-stubs coverage runtime_ccall
5551

5652
RT_LLVMLINK :=
5753
CG_LLVMLINK :=
5854

5955
ifeq ($(JULIACODEGEN),LLVM)
60-
CODEGEN_SRCS := codegen llvm-ptls
61-
RUNTIME_CODEGEN_SRCS := jitlayers aotcompile debuginfo disasm llvm-simdloop llvm-muladd \
62-
llvm-final-gc-lowering llvm-pass-helpers llvm-late-gc-lowering \
56+
CODEGEN_SRCS := codegen jitlayers aotcompile debuginfo disasm llvm-simdloop llvm-muladd \
57+
llvm-final-gc-lowering llvm-pass-helpers llvm-late-gc-lowering llvm-ptls \
6358
llvm-lower-handlers llvm-gc-invariant-verifier llvm-propagate-addrspaces \
6459
llvm-multiversioning llvm-alloc-opt llvm-alloc-helpers cgmemmgr llvm-remove-addrspaces \
6560
llvm-remove-ni llvm-julia-licm llvm-demote-float16 llvm-cpufeatures
@@ -85,9 +80,9 @@ endif
8580

8681
RT_LLVM_LIBS := support
8782

88-
SRCS += $(RUNTIME_SRCS)
89-
90-
CODEGEN_SRCS += $(RUNTIME_CODEGEN_SRCS)
83+
ifeq ($(OS),WINNT)
84+
SRCS += win32_ucontext
85+
endif
9186

9287
ifeq ($(WITH_DTRACE),1)
9388
DTRACE_HEADERS := uprobes.h.gen
@@ -438,53 +433,55 @@ endif
438433

439434
clangsa: $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT)
440435
clangsa: $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT)
441-
# TODO: clangsa: $(build_shlibdir)/libImplicitAtomics2Plugin.$(SHLIB_EXT)
436+
437+
# optarg is a required_argument for these
438+
SA_EXCEPTIONS-jloptions.c := -Xanalyzer -analyzer-config -Xanalyzer silence-checkers="core.NonNullParamChecker;unix.cstring.NullArg"
439+
# clang doesn't understand that e->vars has the same value in save_env (NULL) and restore_env (assumed non-NULL)
440+
SA_EXCEPTIONS-subtype.c := -Xanalyzer -analyzer-config -Xanalyzer silence-checkers="core.uninitialized.Assign;core.UndefinedBinaryOperatorResult"
441+
SA_EXCEPTIONS-codegen.c := -Xanalyzer -analyzer-config -Xanalyzer silence-checkers="core"
442+
# these need to be annotated (and possibly fixed)
443+
SKIP_IMPLICIT_ATOMICS := dump.c module.c staticdata.c codegen.cpp
444+
# these need to be annotated (and possibly fixed)
445+
SKIP_GC_CHECK := codegen.cpp rtutils.c
442446

443447
clang-sagc-%: $(SRCDIR)/%.c $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
444448
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text --analyzer-no-default-checks \
445449
-Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker \
450+
$(SA_EXCEPTIONS-$(notdir $<)) \
446451
$(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(JL_CFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -x c $<)
447452
clang-sagc-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
448453
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text --analyzer-no-default-checks \
449454
-Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker \
455+
$(SA_EXCEPTIONS-$(notdir $<)) \
450456
$(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(JL_CXXFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -x c++ $<)
451457

452-
# optarg is a required_argument for these
453-
SA_EXCEPTIONS-jloptions.c := -Xanalyzer -analyzer-disable-checker=core.NonNullParamChecker,unix.cstring.NullArg
454-
# clang doesn't understand that e->vars has the same value in save_env (NULL) and restore_env (assumed non-NULL)
455-
SA_EXCEPTIONS-subtype.c := -Xanalyzer -analyzer-disable-checker=core.uninitialized.Assign,core.UndefinedBinaryOperatorResult
456-
# these need to be annotated (and possibly fixed)
457-
SKIP_IMPLICIT_ATOMICS := dump.c gf.c jitlayers.cpp module.c precompile.c rtutils.c staticdata.c toplevel.c codegen.cpp
458-
459-
clang-sa-%: $(SRCDIR)/%.c $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
458+
clang-sa-%: $(SRCDIR)/%.c .FORCE | analyzegc-deps-check
460459
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text \
461-
$(if $(findstring $(notdir $<),$(SKIP_IMPLICIT_ATOMICS)),,-Xclang -load -Xclang $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) -Xclang -analyzer-checker=julia.ImplicitAtomics) \
462460
-Xanalyzer -analyzer-disable-checker=deadcode.DeadStores \
463-
--analyzer-no-default-checks \
464461
$(SA_EXCEPTIONS-$(notdir $<)) \
465462
$(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(JL_CFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -Werror -x c $<)
466-
clang-sa-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
463+
clang-sa-%: $(SRCDIR)/%.cpp .FORCE | analyzegc-deps-check
467464
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text \
468-
$(if $(findstring $(notdir $<),$(SKIP_IMPLICIT_ATOMICS)),,-Xclang -load -Xclang $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) -Xclang -analyzer-checker=julia.ImplicitAtomics) \
469465
-Xanalyzer -analyzer-disable-checker=deadcode.DeadStores \
470-
--analyzer-no-default-checks \
471466
$(SA_EXCEPTIONS-$(notdir $<)) \
472467
$(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(JL_CXXFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -Werror -x c++ $<)
473468

474-
clang-tidy-%: $(SRCDIR)/%.c $(build_shlibdir)/libImplicitAtomics2Plugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
469+
clang-tidy-%: $(SRCDIR)/%.c $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
475470
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang-tidy $< -header-filter='.*' --quiet \
476-
-load $(build_shlibdir)/libImplicitAtomics2Plugin.$(SHLIB_EXT) --checks='-clang-analyzer-*$(COMMA)-clang-diagnostic-*$(COMMA)concurrency-implicit-atomics' --warnings-as-errors='*' \
471+
-load $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) --checks='-clang-analyzer-*$(COMMA)-clang-diagnostic-*$(COMMA)concurrency-implicit-atomics' --warnings-as-errors='*' \
477472
-- $(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(JL_CFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics -fno-caret-diagnostics -x c)
478-
clang-tidy-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libImplicitAtomics2Plugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
473+
clang-tidy-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
479474
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang-tidy $< -header-filter='.*' --quiet \
480-
-load $(build_shlibdir)/libImplicitAtomics2Plugin.$(SHLIB_EXT) --checks='-clang-analyzer-*$(COMMA)-clang-diagnostic-*$(COMMA)concurrency-implicit-atomics' --warnings-as-errors='*' \
475+
-load $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB_EXT) --checks='-clang-analyzer-*$(COMMA)-clang-diagnostic-*$(COMMA)concurrency-implicit-atomics' --warnings-as-errors='*' \
481476
-- $(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(JL_CXXFLAGS) $(DEBUGFLAGS) -fcolor-diagnostics --system-header-prefix=llvm -Wno-deprecated-declarations -fno-caret-diagnostics -x c++)
482477

483478

484479
# Add C files as a target of `analyzesrc` and `analyzegc` and `tidysrc`
485-
tidysrc: $(addprefix clang-tidy-,$(filter-out $(basename $(SKIP_IMPLICIT_ATOMICS)), $(SRCS)))
486-
analyzesrc: $(addprefix clang-sa-,$(SRCS))
487-
analyzegc: analyzesrc $(addprefix clang-sagc-,$(RUNTIME_SRCS))
480+
tidysrc: $(addprefix clang-tidy-,$(filter-out $(basename $(SKIP_IMPLICIT_ATOMICS)),$(CODEGEN_SRCS) $(SRCS)))
481+
analyzesrc: $(addprefix clang-sa-,$(CODEGEN_SRCS) $(SRCS))
482+
analyzegc: $(addprefix clang-sagc-,$(filter-out $(basename $(SKIP_GC_CHECK)),$(CODEGEN_SRCS) $(SRCS)))
483+
analyzegc: analyzesrc tidysrc # TODO: remove me (depended on by CI currently)
484+
analyze: analyzesrc analyzegc tidysrc
488485

489486
clean-analyzegc:
490487
rm -f $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT)

src/ast.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@ static value_t fl_julia_current_line(fl_context_t *fl_ctx, value_t *args, uint32
177177
return fixnum(jl_lineno);
178178
}
179179

180+
static int jl_is_number(jl_value_t *v)
181+
{
182+
jl_datatype_t *t = (jl_datatype_t*)jl_typeof(v);
183+
for (; t->super != t; t = t->super)
184+
if (t == jl_number_type)
185+
return 1;
186+
return 0;
187+
}
188+
180189
// Check whether v is a scalar for purposes of inlining fused-broadcast
181190
// arguments when lowering; should agree with broadcast.jl on what is a
182191
// scalar. When in doubt, return false, since this is only an optimization.
@@ -187,7 +196,7 @@ static value_t fl_julia_scalar(fl_context_t *fl_ctx, value_t *args, uint32_t nar
187196
return fl_ctx->T;
188197
else if (iscvalue(args[0]) && fl_ctx->jl_sym == cv_type((cvalue_t*)ptr(args[0]))) {
189198
jl_value_t *v = *(jl_value_t**)cptr(args[0]);
190-
if (jl_isa(v,(jl_value_t*)jl_number_type) || jl_is_string(v))
199+
if (jl_is_number(v) || jl_is_string(v))
191200
return fl_ctx->T;
192201
}
193202
return fl_ctx->F;
@@ -198,7 +207,7 @@ static jl_value_t *scm_to_julia_(fl_context_t *fl_ctx, value_t e, jl_module_t *m
198207
static const builtinspec_t julia_flisp_ast_ext[] = {
199208
{ "defined-julia-global", fl_defined_julia_global }, // TODO: can we kill this safepoint
200209
{ "current-julia-module-counter", fl_current_module_counter },
201-
{ "julia-scalar?", fl_julia_scalar }, // TODO: can we kill this safepoint? (from jl_isa)
210+
{ "julia-scalar?", fl_julia_scalar },
202211
{ "julia-current-file", fl_julia_current_file },
203212
{ "julia-current-line", fl_julia_current_line },
204213
{ NULL, NULL }

0 commit comments

Comments
 (0)