Skip to content

Commit 896d0b1

Browse files
committed
add few more tests
1 parent acca58b commit 896d0b1

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

Compiler/test/effects.jl

+34
Original file line numberDiff line numberDiff line change
@@ -1401,3 +1401,37 @@ end == Compiler.EFFECTS_UNKNOWN
14011401
@test !Compiler.intrinsic_nothrow(Core.Intrinsics.fpext, Any[Type{Float32}, Float64])
14021402
@test !Compiler.intrinsic_nothrow(Core.Intrinsics.fpext, Any[Type{Int32}, Float16])
14031403
@test !Compiler.intrinsic_nothrow(Core.Intrinsics.fpext, Any[Type{Float32}, Int16])
1404+
1405+
# effects modeling for pointer-related intrinsics
1406+
let effects = Base.infer_effects(Core.Intrinsics.pointerref, Tuple{Vararg{Any}})
1407+
@test !Compiler.is_consistent(effects)
1408+
@test Compiler.is_effect_free(effects)
1409+
@test !Compiler.is_inaccessiblememonly(effects)
1410+
end
1411+
let effects = Base.infer_effects(Core.Intrinsics.pointerset, Tuple{Vararg{Any}})
1412+
@test Compiler.is_consistent(effects)
1413+
@test !Compiler.is_effect_free(effects)
1414+
end
1415+
# effects modeling for atomic intrinsics
1416+
# these functions especially need to be marked !effect_free since they imply synchronization
1417+
for atomicfunc = Any[
1418+
Core.Intrinsics.atomic_pointerref,
1419+
Core.Intrinsics.atomic_pointerset,
1420+
Core.Intrinsics.atomic_pointerswap,
1421+
Core.Intrinsics.atomic_pointerreplace,
1422+
Core.Intrinsics.atomic_fence]
1423+
@test !Compiler.is_effect_free(Base.infer_effects(atomicfunc, Tuple{Vararg{Any}}))
1424+
end
1425+
1426+
# effects modeling for intrinsics that can do arbitrary things
1427+
let effects = Base.infer_effects(Core.Intrinsics.llvmcall, Tuple{Vararg{Any}})
1428+
@test effects == Compiler.Effects()
1429+
end
1430+
let effects = Base.infer_effects(Core.Intrinsics.atomic_pointermodify, Tuple{Vararg{Any}})
1431+
@test effects == Compiler.Effects()
1432+
end
1433+
1434+
# JuliaLang/julia#57780
1435+
let effects = Base.infer_effects(Base._unsetindex!, (MemoryRef{String},))
1436+
@test !Compiler.is_effect_free(effects)
1437+
end

0 commit comments

Comments
 (0)