Skip to content

Commit

Permalink
More static analyzer fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
gbaraldi committed Jan 4, 2024
1 parent b61062b commit fa6e077
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 11 deletions.
10 changes: 7 additions & 3 deletions src/clangsa/GCChecker.cpp
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -14,6 +15,7 @@
#include "clang/Tooling/Tooling.h"
#include "clang/StaticAnalyzer/Frontend/CheckerRegistry.h"

#include "llvm/Support/Debug.h"
#include <iostream>
#include <memory>

Expand Down Expand Up @@ -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<TypedefType>(Callee->getType())) {
isCalleeSafepoint =
!declHasAnnotation(TDT->getDecl(), "julia_not_safepoint");
} else if (const ElaboratedType *ET = dyn_cast<ElaboratedType>(Callee->getType())){
if (const TypedefType *TDT = dyn_cast<TypedefType>(ET->getNamedType())) {
isCalleeSafepoint =
!declHasAnnotation(TDT->getDecl(), "julia_not_safepoint");
}
} else if (const CXXPseudoDestructorExpr *PDE =
dyn_cast<CXXPseudoDestructorExpr>(Callee)) {
// A pseudo-destructor is an expression that looks like a member
Expand Down
1 change: 1 addition & 0 deletions src/julia.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions src/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -251,14 +251,14 @@ extern JL_DLLEXPORT bool jl_processor_print_help;
* If the detected/specified CPU name is not available on the LLVM version specified,
* a fallback CPU name will be used. Unsupported features will be ignored.
*/
extern "C" JL_DLLEXPORT std::pair<std::string,llvm::SmallVector<std::string, 0>> jl_get_llvm_target(bool imaging, uint32_t &flags) JL_NOTSAFEPOINT;
JL_DLLEXPORT std::pair<std::string,llvm::SmallVector<std::string, 0>> jl_get_llvm_target(bool imaging, uint32_t &flags) JL_NOTSAFEPOINT;

/**
* Returns the CPU name and feature string to be used by LLVM disassembler.
*
* This will return a generic CPU name and a full feature string.
*/
extern "C" JL_DLLEXPORT const std::pair<std::string,std::string> &jl_get_llvm_disasm_target(void) JL_NOTSAFEPOINT;
JL_DLLEXPORT const std::pair<std::string,std::string> &jl_get_llvm_disasm_target(void) JL_NOTSAFEPOINT;

struct jl_target_spec_t {
// LLVM target name
Expand All @@ -275,7 +275,7 @@ struct jl_target_spec_t {
/**
* Return the list of targets to clone
*/
extern "C" JL_DLLEXPORT llvm::SmallVector<jl_target_spec_t, 0> jl_get_llvm_clone_targets(void) JL_NOTSAFEPOINT;
JL_DLLEXPORT llvm::SmallVector<jl_target_spec_t, 0> 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;

Expand Down
6 changes: 3 additions & 3 deletions src/processor_x86.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string,llvm::SmallVector<std::string, 0>> jl_get_llvm_target(bool imaging, uint32_t &flags)
JL_DLLEXPORT std::pair<std::string,llvm::SmallVector<std::string, 0>> 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<std::string,std::string> &jl_get_llvm_disasm_target(void)
JL_DLLEXPORT const std::pair<std::string,std::string> &jl_get_llvm_disasm_target(void)
{
static const auto res = get_llvm_target_str(TargetData<feature_sz>{"generic", "",
{feature_masks, 0}, {{}, 0}, 0});
return res;
}

extern "C" JL_DLLEXPORT llvm::SmallVector<jl_target_spec_t, 0> jl_get_llvm_clone_targets(void)
JL_DLLEXPORT llvm::SmallVector<jl_target_spec_t, 0> jl_get_llvm_clone_targets(void)
{
if (jit_targets.empty())
jl_error("JIT targets not initialized");
Expand Down
4 changes: 2 additions & 2 deletions src/runtime_intrinsics.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 <xmmintrin.h>
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"
Expand All @@ -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"
Expand Down

0 comments on commit fa6e077

Please sign in to comment.