@@ -1402,3 +1402,49 @@ end
14021402 end
14031403 end
14041404end
1405+
1406+ # https://github.com/JuliaLang/julia/issues/45050
1407+ @testset " propagate :meta annotations to keyword sorter methods" begin
1408+ # @inline, @noinline, @constprop
1409+ let @inline f (:: Any ; x:: Int = 1 ) = 2 x
1410+ @test ccall (:jl_ir_flag_inlineable , Bool, (Any,), only (methods (f)). source)
1411+ @test ccall (:jl_ir_flag_inlineable , Bool, (Any,), only (methods (Core. kwfunc (f))). source)
1412+ end
1413+ let @noinline f (:: Any ; x:: Int = 1 ) = 2 x
1414+ @test ! ccall (:jl_ir_flag_inlineable , Bool, (Any,), only (methods (f)). source)
1415+ @test ! ccall (:jl_ir_flag_inlineable , Bool, (Any,), only (methods (Core. kwfunc (f))). source)
1416+ end
1417+ let Base. @constprop :aggressive f (:: Any ; x:: Int = 1 ) = 2 x
1418+ @test Core. Compiler. is_aggressive_constprop (only (methods (f)))
1419+ @test Core. Compiler. is_aggressive_constprop (only (methods (Core. kwfunc (f))))
1420+ end
1421+ let Base. @constprop :none f (:: Any ; x:: Int = 1 ) = 2 x
1422+ @test Core. Compiler. is_no_constprop (only (methods (f)))
1423+ @test Core. Compiler. is_no_constprop (only (methods (Core. kwfunc (f))))
1424+ end
1425+ # @nospecialize
1426+ let f (@nospecialize (A:: Any ); x:: Int = 1 ) = 2 x
1427+ @test only (methods (f)). nospecialize == 1
1428+ @test only (methods (Core. kwfunc (f))). nospecialize == 4
1429+ end
1430+ let f (:: Any ; x:: Int = 1 ) = (@nospecialize ; 2 x)
1431+ @test only (methods (f)). nospecialize == - 1
1432+ @test only (methods (Core. kwfunc (f))). nospecialize == - 1
1433+ end
1434+ # Base.@assume_effects
1435+ let Base. @assume_effects :notaskstate f (:: Any ; x:: Int = 1 ) = 2 x
1436+ @test Core. Compiler. decode_effects_override (only (methods (f)). purity). notaskstate
1437+ @test Core. Compiler. decode_effects_override (only (methods (Core. kwfunc (f))). purity). notaskstate
1438+ end
1439+ # propagate multiple metadata also
1440+ let @inline Base. @assume_effects :notaskstate Base. @constprop :aggressive f (:: Any ; x:: Int = 1 ) = (@nospecialize ; 2 x)
1441+ @test ccall (:jl_ir_flag_inlineable , Bool, (Any,), only (methods (f)). source)
1442+ @test Core. Compiler. is_aggressive_constprop (only (methods (f)))
1443+ @test ccall (:jl_ir_flag_inlineable , Bool, (Any,), only (methods (Core. kwfunc (f))). source)
1444+ @test Core. Compiler. is_aggressive_constprop (only (methods (Core. kwfunc (f))))
1445+ @test only (methods (f)). nospecialize == - 1
1446+ @test only (methods (Core. kwfunc (f))). nospecialize == - 1
1447+ @test Core. Compiler. decode_effects_override (only (methods (f)). purity). notaskstate
1448+ @test Core. Compiler. decode_effects_override (only (methods (Core. kwfunc (f))). purity). notaskstate
1449+ end
1450+ end
0 commit comments