Skip to content

Commit d7ccfd2

Browse files
barchevtjnash
andauthored
Backport PR #42152 to 1.7 (#42828)
Co-authored-by: Jameson Nash <[email protected]>
1 parent 382129f commit d7ccfd2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+801
-578
lines changed

src/Makefile

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ SRCS += $(RUNTIME_SRCS)
8787

8888
# headers are used for dependency tracking, while public headers will be part of the dist
8989
UV_HEADERS :=
90-
HEADERS := $(BUILDDIR)/julia_version.h $(wildcard $(SRCDIR)/support/*.h) $(addprefix $(SRCDIR)/,julia.h julia_assert.h julia_threads.h julia_fasttls.h locks.h atomics.h julia_internal.h options.h timing.h)
91-
PUBLIC_HEADERS := $(BUILDDIR)/julia_version.h $(wildcard $(SRCDIR)/support/*.h) $(addprefix $(SRCDIR)/,julia.h julia_assert.h julia_threads.h julia_fasttls.h locks.h atomics.h julia_gcext.h jloptions.h)
90+
HEADERS := $(BUILDDIR)/julia_version.h $(wildcard $(SRCDIR)/support/*.h) $(addprefix $(SRCDIR)/,julia.h julia_assert.h julia_threads.h julia_fasttls.h julia_locks.h julia_atomics.h julia_internal.h options.h timing.h) $(addprefix $(BUILDDIR)/, $(DTRACE_HEADERS))
91+
PUBLIC_HEADERS := $(BUILDDIR)/julia_version.h $(wildcard $(SRCDIR)/support/*.h) $(addprefix $(SRCDIR)/,julia.h julia_assert.h julia_threads.h julia_fasttls.h julia_locks.h julia_atomics.h julia_gcext.h jloptions.h)
9292
ifeq ($(USE_SYSTEM_LIBUV),0)
9393
UV_HEADERS += uv.h
9494
UV_HEADERS += uv/*.h
@@ -358,15 +358,23 @@ endif
358358

359359
clangsa: $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT)
360360

361-
clang-sa-%: $(SRCDIR)/%.c $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) | analyzegc-deps-check
362-
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text -Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) $(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(DEBUGFLAGS) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c $<)
363-
clang-sa-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) | analyzegc-deps-check
364-
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text -Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) $(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(DEBUGFLAGS) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c++ $<)
361+
clang-sagc-%: $(SRCDIR)/%.c $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
362+
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text -Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) $(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(DEBUGFLAGS) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c $<)
363+
clang-sagc-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) .FORCE | analyzegc-deps-check
364+
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang -D__clang_gcanalyzer__ --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text -Xclang -load -Xclang $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT) $(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(DEBUGFLAGS) -Xclang -analyzer-checker=core$(COMMA)julia.GCChecker --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c++ $<)
365365

366-
# Add C files as a target of `analyzegc`
367-
analyzegc: $(addprefix clang-sa-,$(RUNTIME_SRCS))
366+
clang-sa-%: $(SRCDIR)/%.c .FORCE | analyzegc-deps-check
367+
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text $(CLANGSA_FLAGS) $(JCPPFLAGS) $(JCFLAGS) $(DEBUGFLAGS) --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c $<)
368+
clang-sa-%: $(SRCDIR)/%.cpp .FORCE | analyzegc-deps-check
369+
@$(call PRINT_ANALYZE, $(build_depsbindir)/clang --analyze -Xanalyzer -analyzer-werror -Xanalyzer -analyzer-output=text $(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS) $(JCXXFLAGS) $(DEBUGFLAGS) --analyzer-no-default-checks -fcolor-diagnostics -Werror -x c++ $<)
370+
371+
372+
# Add C files as a target of `analyzesrc` and `analyzegc`
373+
analyzesrc: $(addprefix clang-sa-,$(SRCS))
374+
analyzegc: analyzesrc $(addprefix clang-sagc-,$(RUNTIME_SRCS))
368375

369376
clean-analyzegc:
370377
rm -f $(build_shlibdir)/libGCCheckerPlugin.$(SHLIB_EXT)
371378

372-
.PHONY: default all debug release clean cleanall clean-* libccalltest libllvmcalltest julia_flisp.boot.inc.phony analyzegc clang-sa-*
379+
.FORCE:
380+
.PHONY: default all debug release clean cleanall clean-* libccalltest libllvmcalltest julia_flisp.boot.inc.phony analyzegc analyzesrc .FORCE

src/array.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ static inline void arrayassign_safe(int hasptr, jl_value_t *parent, char *dst, c
2626
assert(nb >= jl_datatype_size(jl_typeof(src))); // nb might move some undefined bits, but we should be okay with that
2727
if (hasptr) {
2828
size_t nptr = nb / sizeof(void*);
29-
memmove_refs((void**)dst, (void**)src, nptr);
29+
memmove_refs((void**)dst, (void* const*)src, nptr);
3030
jl_gc_multi_wb(parent, src);
3131
}
3232
else {
@@ -581,7 +581,7 @@ JL_DLLEXPORT jl_value_t *jl_ptrarrayref(jl_array_t *a JL_PROPAGATES_ROOT, size_t
581581
{
582582
assert(i < jl_array_len(a));
583583
assert(a->flags.ptrarray);
584-
jl_value_t *elt = jl_atomic_load_relaxed(((jl_value_t**)a->data) + i);
584+
jl_value_t *elt = jl_atomic_load_relaxed(((_Atomic(jl_value_t*)*)a->data) + i);
585585
if (elt == NULL)
586586
jl_throw(jl_undefref_exception);
587587
return elt;
@@ -610,7 +610,7 @@ JL_DLLEXPORT jl_value_t *jl_arrayref(jl_array_t *a, size_t i)
610610
JL_DLLEXPORT int jl_array_isassigned(jl_array_t *a, size_t i)
611611
{
612612
if (a->flags.ptrarray) {
613-
return jl_atomic_load_relaxed(((jl_value_t**)jl_array_data(a)) + i) != NULL;
613+
return jl_atomic_load_relaxed(((_Atomic(jl_value_t*)*)jl_array_data(a)) + i) != NULL;
614614
}
615615
else if (a->flags.hasptr) {
616616
jl_datatype_t *eltype = (jl_datatype_t*)jl_tparam0(jl_typeof(a));
@@ -649,7 +649,7 @@ JL_DLLEXPORT void jl_arrayset(jl_array_t *a JL_ROOTING_ARGUMENT, jl_value_t *rhs
649649
arrayassign_safe(hasptr, jl_array_owner(a), &((char*)a->data)[i * a->elsize], rhs, a->elsize);
650650
}
651651
else {
652-
jl_atomic_store_relaxed(((jl_value_t**)a->data) + i, rhs);
652+
jl_atomic_store_relaxed(((_Atomic(jl_value_t*)*)a->data) + i, rhs);
653653
jl_gc_wb(jl_array_owner(a), rhs);
654654
}
655655
}
@@ -659,7 +659,7 @@ JL_DLLEXPORT void jl_arrayunset(jl_array_t *a, size_t i)
659659
if (i >= jl_array_len(a))
660660
jl_bounds_error_int((jl_value_t*)a, i + 1);
661661
if (a->flags.ptrarray)
662-
jl_atomic_store_relaxed(((jl_value_t**)a->data) + i, NULL);
662+
jl_atomic_store_relaxed(((_Atomic(jl_value_t*)*)a->data) + i, NULL);
663663
else if (a->flags.hasptr) {
664664
size_t elsize = a->elsize;
665665
jl_assume(elsize >= sizeof(void*) && elsize % sizeof(void*) == 0);
@@ -1236,9 +1236,11 @@ static NOINLINE ssize_t jl_array_ptr_copy_forward(jl_value_t *owner,
12361236
void **src_p, void **dest_p,
12371237
ssize_t n) JL_NOTSAFEPOINT
12381238
{
1239+
_Atomic(void*) *src_pa = (_Atomic(void*)*)src_p;
1240+
_Atomic(void*) *dest_pa = (_Atomic(void*)*)dest_p;
12391241
for (ssize_t i = 0; i < n; i++) {
1240-
void *val = jl_atomic_load_relaxed(src_p + i);
1241-
jl_atomic_store_relaxed(dest_p + i, val);
1242+
void *val = jl_atomic_load_relaxed(src_pa + i);
1243+
jl_atomic_store_relaxed(dest_pa + i, val);
12421244
// `val` is young or old-unmarked
12431245
if (val && !(jl_astaggedvalue(val)->bits.gc & GC_MARKED)) {
12441246
jl_gc_queue_root(owner);
@@ -1252,9 +1254,11 @@ static NOINLINE ssize_t jl_array_ptr_copy_backward(jl_value_t *owner,
12521254
void **src_p, void **dest_p,
12531255
ssize_t n) JL_NOTSAFEPOINT
12541256
{
1257+
_Atomic(void*) *src_pa = (_Atomic(void*)*)src_p;
1258+
_Atomic(void*) *dest_pa = (_Atomic(void*)*)dest_p;
12551259
for (ssize_t i = 0; i < n; i++) {
1256-
void *val = jl_atomic_load_relaxed(src_p + n - i - 1);
1257-
jl_atomic_store_relaxed(dest_p + n - i - 1, val);
1260+
void *val = jl_atomic_load_relaxed(src_pa + n - i - 1);
1261+
jl_atomic_store_relaxed(dest_pa + n - i - 1, val);
12581262
// `val` is young or old-unmarked
12591263
if (val && !(jl_astaggedvalue(val)->bits.gc & GC_MARKED)) {
12601264
jl_gc_queue_root(owner);

src/ast.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ typedef struct _jl_ast_context_t {
125125

126126
static jl_ast_context_t jl_ast_main_ctx;
127127

128-
#ifdef __clang_analyzer__
128+
#ifdef __clang_gcanalyzer__
129129
jl_ast_context_t *jl_ast_ctx(fl_context_t *fl) JL_GLOBALLY_ROOTED JL_NOTSAFEPOINT;
130130
#else
131131
#define jl_ast_ctx(fl_ctx) container_of(fl_ctx, jl_ast_context_t, fl)

src/atomics.h

Lines changed: 0 additions & 163 deletions
This file was deleted.

src/builtins.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ static jl_value_t *do_apply( jl_value_t **args, uint32_t nargs, jl_value_t *iter
706706
}
707707
if (arg_heap) {
708708
// optimization: keep only the first root, free the others
709-
#ifndef __clang_analyzer__
709+
#ifndef __clang_gcanalyzer__
710710
((void**)roots)[-2] = (void*)JL_GC_ENCODE_PUSHARGS(1);
711711
#endif
712712
}

src/cgmemmgr.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ static intptr_t get_anon_hdl(void)
205205
return -1;
206206
}
207207

208-
static size_t map_offset = 0;
208+
static _Atomic(size_t) map_offset{0};
209209
// Multiple of 128MB.
210210
// Hopefully no one will set a ulimit for this to be a problem...
211211
static constexpr size_t map_size_inc_default = 128 * 1024 * 1024;
@@ -239,7 +239,7 @@ static intptr_t init_shared_map()
239239
anon_hdl = get_anon_hdl();
240240
if (anon_hdl == -1)
241241
return -1;
242-
map_offset = 0;
242+
jl_atomic_store_relaxed(&map_offset, 0);
243243
map_size = get_map_size_inc();
244244
int ret = ftruncate(anon_hdl, map_size);
245245
if (ret != 0) {

0 commit comments

Comments
 (0)