It appears that the :multi pragma doesn't work if :outer is present.
Sample code:
$ cat x.pir
.sub main :main
new $P0, .String
assign $P0, 'arg0'
new $P1, .String
assign $P1, 'arg1'
$P99 = "foo"($P0)
$P99 = "foo"($P0, $P1)
$P99 = "bar"($P0)
$P99 = "bar"($P0, $P1)
.end
.sub "foo" :multi(_)
.param pmc x
print "foo(_) : "
say x
.return (x)
.end
.sub "foo" :multi(_,_)
.param pmc x
.param pmc y
print "foo(_,_): "
print x
print " "
say y
.return (y)
.end
.sub "bar" :outer("main") :multi(_)
.param pmc x
print "bar(_) : "
say x
.return (x)
.end
.sub "bar" :outer("main") :multi(_,_)
.param pmc x
.param pmc y
print "bar(_,_): "
print x
print " "
say y
.return (y)
.end
$ ./parrot x.pir
foo(_) : arg0
foo(_,_): arg0 arg1
Null PMC access in invoke()
current instr.: 'main' pc 44 (x.pir:11)
$
Pm