diff --git a/src/clangsa/GCChecker.cpp b/src/clangsa/GCChecker.cpp index a88a9ee3ed73c..f8e73c486a862 100644 --- a/src/clangsa/GCChecker.cpp +++ b/src/clangsa/GCChecker.cpp @@ -1,5 +1,6 @@ // This file is a part of Julia. License is MIT: https://julialang.org/license +#include "clang/AST/Type.h" #include "clang/Frontend/FrontendActions.h" #include "clang/StaticAnalyzer/Checkers/SValExplainer.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" @@ -14,6 +15,7 @@ #include "clang/Tooling/Tooling.h" #include "clang/StaticAnalyzer/Frontend/CheckerRegistry.h" +#include "llvm/Support/Debug.h" #include #include @@ -894,9 +896,11 @@ bool GCChecker::isSafepoint(const CallEvent &Call, CheckerContext &C) const { if (!Decl || !FD) { if (Callee == nullptr) { isCalleeSafepoint = true; - } else if (const TypedefType *TDT = dyn_cast(Callee->getType())) { - isCalleeSafepoint = - !declHasAnnotation(TDT->getDecl(), "julia_not_safepoint"); + } else if (const ElaboratedType *ET = dyn_cast(Callee->getType())){ + if (const TypedefType *TDT = dyn_cast(ET->getNamedType())) { + isCalleeSafepoint = + !declHasAnnotation(TDT->getDecl(), "julia_not_safepoint"); + } } else if (const CXXPseudoDestructorExpr *PDE = dyn_cast(Callee)) { // A pseudo-destructor is an expression that looks like a member diff --git a/src/julia.h b/src/julia.h index 44dc913209c6b..55d6a200fbef6 100644 --- a/src/julia.h +++ b/src/julia.h @@ -954,6 +954,7 @@ extern void JL_GC_PUSH2(void *, void *) JL_NOTSAFEPOINT; extern void JL_GC_PUSH3(void *, void *, void *) JL_NOTSAFEPOINT; extern void JL_GC_PUSH4(void *, void *, void *, void *) JL_NOTSAFEPOINT; extern void JL_GC_PUSH5(void *, void *, void *, void *, void *) JL_NOTSAFEPOINT; +extern void JL_GC_PUSH6(void *, void *, void *, void *, void *, void *) JL_NOTSAFEPOINT; extern void JL_GC_PUSH7(void *, void *, void *, void *, void *, void *, void *) JL_NOTSAFEPOINT; extern void JL_GC_PUSH8(void *, void *, void *, void *, void *, void *, void *, void *) JL_NOTSAFEPOINT; extern void _JL_GC_PUSHARGS(jl_value_t **, size_t) JL_NOTSAFEPOINT; diff --git a/src/processor.h b/src/processor.h index a4c8deb9a8796..e49af919f67b5 100644 --- a/src/processor.h +++ b/src/processor.h @@ -244,7 +244,7 @@ JL_DLLEXPORT int32_t jl_get_default_nans(void); #include extern JL_DLLEXPORT bool jl_processor_print_help; - +// NOLINTBEGIN(clang-diagnostic-return-type-c-linkage) /** * Returns the CPU name and feature string to be used by LLVM JIT. * @@ -278,7 +278,7 @@ struct jl_target_spec_t { extern "C" JL_DLLEXPORT llvm::SmallVector jl_get_llvm_clone_targets(void) JL_NOTSAFEPOINT; std::string jl_get_cpu_name_llvm(void) JL_NOTSAFEPOINT; std::string jl_get_cpu_features_llvm(void) JL_NOTSAFEPOINT; - +// NOLINTEND(clang-diagnostic-return-type-c-linkage) struct FeatureName { const char *name; uint32_t bit; // bit index into a `uint32_t` array; diff --git a/src/processor_fallback.cpp b/src/processor_fallback.cpp index 399d31af05ebf..92842d3db6c64 100644 --- a/src/processor_fallback.cpp +++ b/src/processor_fallback.cpp @@ -145,7 +145,7 @@ const std::pair &jl_get_llvm_disasm_target(void) return res; } -extern "C" llvm::SmallVector jl_get_llvm_clone_targets(void) +llvm::SmallVector jl_get_llvm_clone_targets(void) { if (jit_targets.empty()) jl_error("JIT targets not initialized"); diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index 3f8c62acaed11..652a21a3a3286 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1089,21 +1089,21 @@ jl_image_t jl_init_processor_pkgimg(void *hdl) return parse_sysimg(hdl, pkgimg_init_cb); } -extern "C" JL_DLLEXPORT std::pair> jl_get_llvm_target(bool imaging, uint32_t &flags) +std::pair> jl_get_llvm_target(bool imaging, uint32_t &flags) { ensure_jit_target(imaging); flags = jit_targets[0].en.flags; return get_llvm_target_vec(jit_targets[0]); } -extern "C" JL_DLLEXPORT const std::pair &jl_get_llvm_disasm_target(void) +const std::pair &jl_get_llvm_disasm_target(void) { static const auto res = get_llvm_target_str(TargetData{"generic", "", {feature_masks, 0}, {{}, 0}, 0}); return res; } -extern "C" JL_DLLEXPORT llvm::SmallVector jl_get_llvm_clone_targets(void) +llvm::SmallVector jl_get_llvm_clone_targets(void) { if (jit_targets.empty()) jl_error("JIT targets not initialized"); diff --git a/src/runtime_intrinsics.c b/src/runtime_intrinsics.c index 2592b34684324..2a84532c4c76b 100644 --- a/src/runtime_intrinsics.c +++ b/src/runtime_intrinsics.c @@ -213,7 +213,7 @@ static inline uint16_t double_to_half(double param) JL_NOTSAFEPOINT // x86-specific helpers for emulating the (B)Float16 ABI #if defined(_CPU_X86_) || defined(_CPU_X86_64_) #include -static inline __m128 return_in_xmm(uint16_t input) JL_NOTSAFEPOINT { +__attribute__((unused)) static inline __m128 return_in_xmm(uint16_t input) JL_NOTSAFEPOINT { __m128 xmm_output; asm ( "movd %[input], %%xmm0\n\t" @@ -224,7 +224,7 @@ static inline __m128 return_in_xmm(uint16_t input) JL_NOTSAFEPOINT { ); return xmm_output; } -static inline uint16_t take_from_xmm(__m128 xmm_input) JL_NOTSAFEPOINT { +__attribute__((unused)) static inline uint16_t take_from_xmm(__m128 xmm_input) JL_NOTSAFEPOINT { uint32_t output; asm ( "movss %[xmm_input], %%xmm0\n\t"