From 5c251eed133deeb7d8b909b31677785cf7763680 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Mon, 20 May 2019 20:52:24 -0400 Subject: [PATCH] Address Coverity's complaints Coverity: CID 211805 211803 211793 211791 211781 211778 211777 211766 211706 --- src/ccall.cpp | 10 ++++++---- src/cgmemmgr.cpp | 7 ++++--- src/codegen.cpp | 7 ++----- src/datatype.c | 4 ++-- src/dump.c | 1 + src/init.c | 1 + src/jitlayers.cpp | 12 ++++++------ src/jitlayers.h | 2 +- src/runtime_ccall.cpp | 2 +- src/sys.c | 4 +++- 10 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/ccall.cpp b/src/ccall.cpp index 707aead0d9f7d..17842c506cf60 100644 --- a/src/ccall.cpp +++ b/src/ccall.cpp @@ -87,7 +87,7 @@ static bool runtime_sym_gvs(const char *f_lib, const char *f_name, MT &&M, symMap = &libgv.second; libsym = jl_get_library(f_lib); assert(libsym != NULL); - *(void**)jl_emit_and_add_to_shadow(libptrgv) = libsym; + *jl_emit_and_add_to_shadow(libptrgv) = libsym; } else { libptrgv = iter->second.first; @@ -116,7 +116,7 @@ static bool runtime_sym_gvs(const char *f_lib, const char *f_name, MT &&M, (*symMap)[f_name] = std::make_pair(llvmgv, addr); if (symaddr) *symaddr = addr; - *(void**)jl_emit_and_add_to_shadow(llvmgv) = addr; + *jl_emit_and_add_to_shadow(llvmgv) = addr; } else { if (symaddr) @@ -238,7 +238,7 @@ static GlobalVariable *emit_plt_thunk( GlobalVariable *got = new GlobalVariable(*M, T_pvoidfunc, false, GlobalVariable::ExternalLinkage, nullptr, gname); - *(void**)jl_emit_and_add_to_shadow(got) = symaddr; + *jl_emit_and_add_to_shadow(got) = symaddr; BasicBlock *b0 = BasicBlock::Create(jl_LLVMContext, "top", plt); IRBuilder<> irbuilder(b0); Value *ptr = runtime_sym_lookup(irbuilder, funcptype, f_lib, f_name, plt, libptrgv, @@ -1426,7 +1426,9 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs) // method involving `jl_dlsym()` on Linux platforms instead. #ifdef _OS_LINUX_ jl_ptls_t (*p)(void); - jl_dlsym(jl_dlopen(nullptr, 0), "jl_get_ptls_states", (void **)&p, 0); + void *handle = jl_dlopen(nullptr, 0); + jl_dlsym(handle, "jl_get_ptls_states", (void **)&p, 0); + jl_dlclose(handle); return p; #else return &jl_get_ptls_states; diff --git a/src/cgmemmgr.cpp b/src/cgmemmgr.cpp index 823ca0f1091b6..ebba6467528e1 100644 --- a/src/cgmemmgr.cpp +++ b/src/cgmemmgr.cpp @@ -96,9 +96,10 @@ static bool check_fd_or_close(int fd) { if (fd == -1) return false; - fcntl(fd, F_SETFD, FD_CLOEXEC); - fchmod(fd, S_IRWXU); - if (ftruncate(fd, jl_page_size) != 0) { + int err = fcntl(fd, F_SETFD, FD_CLOEXEC); + assert(err == 0); + if (fchmod(fd, S_IRWXU) != 0 || + ftruncate(fd, jl_page_size) != 0) { close(fd); return false; } diff --git a/src/codegen.cpp b/src/codegen.cpp index 71a52d126c146..02ddbbdd37a53 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1101,11 +1101,7 @@ jl_code_instance_t *jl_compile_linfo(jl_method_instance_t *mi, jl_code_info_t *s if (codeinst->min_world <= world && world <= codeinst->max_world) { jl_llvm_functions_t decls = codeinst->functionObjectsDecls; bool already_compiled = params->cached && decls.functionObject != NULL; - if (!src) { - if (already_compiled || codeinst->invoke == jl_fptr_const_return) - goto locked_out; - } - else if (already_compiled) { + if (already_compiled) { goto locked_out; } } @@ -1634,6 +1630,7 @@ void *jl_get_llvmf_decl(jl_method_instance_t *mi, size_t world, bool getwrapper, return returninfo.decl; } } + assert(decls.functionObject); auto f = Function::Create(jl_func_sig, GlobalVariable::ExternalLinkage, decls.functionObject); add_return_attr(f, Attribute::NonNull); f->addFnAttr(Thunk); diff --git a/src/datatype.c b/src/datatype.c index ac5606ced893b..34cd8bfa14c6a 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -852,6 +852,8 @@ JL_DLLEXPORT jl_value_t *jl_new_structt(jl_datatype_t *type, jl_value_t *tup) jl_ptls_t ptls = jl_get_ptls_states(); if (!jl_is_tuple(tup)) jl_type_error("new", (jl_value_t*)jl_tuple_type, tup); + if (type->layout == NULL) + jl_type_error("new", (jl_value_t *)jl_datatype_type, (jl_value_t *)type); size_t nargs = jl_nfields(tup); size_t nf = jl_datatype_nfields(type); JL_NARGS(new, nf, nf); @@ -866,8 +868,6 @@ JL_DLLEXPORT jl_value_t *jl_new_structt(jl_datatype_t *type, jl_value_t *tup) } return type->instance; } - if (type->layout == NULL) - jl_type_error("new", (jl_value_t*)jl_datatype_type, (jl_value_t*)type); jl_value_t *jv = jl_gc_alloc(ptls, jl_datatype_size(type), type); jl_value_t *fi = NULL; JL_GC_PUSH2(&jv, &fi); diff --git a/src/dump.c b/src/dump.c index 27b218123f2d5..2623dac5786ef 100644 --- a/src/dump.c +++ b/src/dump.c @@ -3072,6 +3072,7 @@ static jl_method_t *jl_lookup_method_worldset(jl_methtable_t *mt, jl_datatype_t while (1) { entry = jl_typemap_assoc_by_type( mt->defs, (jl_value_t*)sig, NULL, /*subtype*/0, /*offs*/0, world, /*max_world_mask*/(~(size_t)0) >> 1); + assert(entry); jl_method_t *_new = (jl_method_t*)entry->func.value; world = lowerbound_dependent_world_set(_new->primary_world, dependent_worlds); if (world == _new->primary_world) { diff --git a/src/init.c b/src/init.c index 1494e858a8221..5e01d62ae75e7 100644 --- a/src/init.c +++ b/src/init.c @@ -397,6 +397,7 @@ static void *init_stdio_handle(const char *stdio, uv_os_fd_t fd, int readable) { int nullfd; nullfd = open("/dev/null", O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH /* 0666 */); + assert(nullfd != -1); dup2(nullfd, fd); close(nullfd); } diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index cd68699728c53..fa6ecd1dddbfc 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -433,9 +433,9 @@ JuliaOJIT::JuliaOJIT(TargetMachine &TM) // Make sure SectionMemoryManager::getSymbolAddressInProcess can resolve // symbols in the program as well. The nullptr argument to the function // tells DynamicLibrary to load the program, not a library. - std::string *ErrorStr = nullptr; - if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr, ErrorStr)) - report_fatal_error("FATAL: unable to dlopen self\n" + *ErrorStr); + std::string ErrorStr; + if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr, &ErrorStr)) + report_fatal_error("FATAL: unable to dlopen self\n" + ErrorStr); } void JuliaOJIT::addGlobalMapping(StringRef Name, uint64_t Addr) @@ -873,7 +873,7 @@ static std::map jl_value_to_llvm; // // then add a global mapping to the current value (usually from calloc'd space) // to the execution engine to make it valid for the current session (with the current value) -void* jl_emit_and_add_to_shadow(GlobalVariable *gv, void *gvarinit) +void** jl_emit_and_add_to_shadow(GlobalVariable *gv, void *gvarinit) { PointerType *T = cast(gv->getType()->getElementType()); // pointer is the only supported type here @@ -896,7 +896,7 @@ void* jl_emit_and_add_to_shadow(GlobalVariable *gv, void *gvarinit) } // make the pointer valid for this session - void *slot = calloc(1, sizeof(void*)); + void **slot = (void**)calloc(1, sizeof(void*)); jl_ExecutionEngine->addGlobalMapping(gv, slot); return slot; } @@ -1150,7 +1150,7 @@ GlobalVariable *jl_get_global_for(const char *cname, void *addr, Module *M) GlobalVariable *gv = new GlobalVariable(*M, T_pjlvalue, false, GlobalVariable::ExternalLinkage, NULL, gvname.str()); - *(void**)jl_emit_and_add_to_shadow(gv, addr) = addr; + *jl_emit_and_add_to_shadow(gv, addr) = addr; return gv; } diff --git a/src/jitlayers.h b/src/jitlayers.h index 1056146f1697c..95332bdc5c8de 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -38,7 +38,7 @@ typedef struct {Value *gv; int32_t index;} jl_value_llvm; // uses 1-based indexi void addTargetPasses(legacy::PassManagerBase *PM, TargetMachine *TM); void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level, bool lower_intrinsics=true, bool dump_native=false); -void* jl_emit_and_add_to_shadow(GlobalVariable *gv, void *gvarinit = NULL); +void** jl_emit_and_add_to_shadow(GlobalVariable *gv, void *gvarinit = NULL); void* jl_get_globalvar(GlobalVariable *gv); GlobalVariable *jl_get_global_for(const char *cname, void *addr, Module *M); void jl_add_to_shadow(Module *m); diff --git a/src/runtime_ccall.cpp b/src/runtime_ccall.cpp index 9376fd1b92aae..220dfed1b2d5d 100644 --- a/src/runtime_ccall.cpp +++ b/src/runtime_ccall.cpp @@ -272,7 +272,7 @@ jl_value_t *jl_get_cfunction_trampoline( // not found, allocate a new one size_t n = jl_svec_len(fill); - void **nval = (void**)malloc(sizeof(void**) * (n + 1)); + void **nval = (void**)malloc(sizeof(void*) * (n + 1)); nval[0] = (void*)fobj; jl_value_t *result; JL_TRY { diff --git a/src/sys.c b/src/sys.c index ecb973e0c288f..9632765801fe2 100644 --- a/src/sys.c +++ b/src/sys.c @@ -493,7 +493,9 @@ JL_DLLEXPORT long jl_getpagesize(void) #else JL_DLLEXPORT long jl_getpagesize(void) { - return sysconf(_SC_PAGESIZE); + long page_size = sysconf(_SC_PAGESIZE); + assert(page_size != -1); + return page_size; } #endif