Skip to content

Commit 37794e1

Browse files
authored
Merge pull request #184 from maleadt/tb/personality
Fix personality function handling
2 parents 9ddf0af + 186ab1b commit 37794e1

File tree

6 files changed

+26
-6
lines changed

6 files changed

+26
-6
lines changed

.gitlab-ci.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@ test:1.3:
2323
extends:
2424
- .julia:1.3
2525
- .test
26-
allow_failure: true
2726

2827
test:1.4:
2928
extends:
3029
- .julia:1.4
3130
- .test
32-
allow_failure: true
31+
32+
test:1.5:
33+
extends:
34+
- .julia:1.4
35+
- .test
3336

3437
test:nightly:
3538
extends:

.travis.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ julia:
1010
- 1.2
1111
- 1.3
1212
- 1.4
13+
- 1.5
1314
- nightly
1415

1516
notifications:
@@ -26,3 +27,5 @@ jobs:
2627
Pkg.instantiate()'
2728
- julia --project=docs/ docs/make.jl
2829
after_success: skip
30+
allow_failures:
31+
- julia: nightly

src/core/function.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@ Function(mod::Module, name::String, ft::FunctionType) =
1212

1313
unsafe_delete!(::Module, f::Function) = API.LLVMDeleteFunction(ref(f))
1414

15-
personality(f::Function) = Function(API.LLVMGetPersonalityFn(ref(f)))
16-
personality!(f::Function, persfn::Function) = API.LLVMSetPersonalityFn(ref(f), ref(persfn))
15+
function personality(f::Function)
16+
has_personality = convert(Core.Bool, API.LLVMHasPersonalityFn(ref(f)))
17+
return has_personality ? Function(API.LLVMGetPersonalityFn(ref(f))) : nothing
18+
end
19+
personality!(f::Function, persfn::Union{Nothing,Function}) =
20+
API.LLVMSetPersonalityFn(ref(f), persfn===nothing ? C_NULL : ref(persfn))
1721

1822
intrinsic_id(f::Function) = API.LLVMGetIntrinsicID(ref(f))
1923

src/core/type.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ export isvararg, return_type, parameters
9898
end
9999
identify(::Type{LLVMType}, ::Val{API.LLVMFunctionTypeKind}) = FunctionType
100100

101-
FunctionType(rettyp::LLVMType, params::Vector{T}=LLVMType[], vararg::Core.Bool=false) where {T<:LLVMType} =
101+
FunctionType(rettyp::LLVMType, params::Vector{T}=LLVMType[];
102+
vararg::Core.Bool=false) where {T<:LLVMType} =
102103
FunctionType(API.LLVMFunctionType(ref(rettyp), ref.(params),
103104
length(params), convert(Bool, vararg)))
104105

src/deprecated.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
import Base: get
44

55
@deprecate get(set::TargetSet, name::String) getindex(set, name)
6+
7+
@deprecate FunctionType(rettyp, params, vararg) FunctionType(rettyp, params; vararg=vararg)

test/core.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,14 @@ LLVM.Module("SomeModule", ctx) do mod
669669

670670
show(devnull, fn)
671671

672-
# @show personality(fn)
672+
@test personality(fn) === nothing
673+
pers_ft = LLVM.FunctionType(LLVM.Int32Type(ctx); vararg=true)
674+
pers_fn = LLVM.Function(mod, "PersonalityFunction", ft)
675+
personality!(fn, pers_fn)
676+
@test personality(fn) == pers_fn
677+
personality!(fn, nothing)
678+
@test personality(fn) === nothing
679+
unsafe_delete!(mod, pers_fn)
673680

674681
@test intrinsic_id(fn) == 0
675682

0 commit comments

Comments
 (0)