Fix codegen for some set operations

Taking the LHS type when a temporary result value was needed lead to bad
code being generated if we get a tyRef.

Fixes #9098
This commit is contained in:
LemonBoy
2018-09-28 09:59:45 +02:00
parent 07748dba68
commit a1083d7c43
2 changed files with 13 additions and 1 deletions

View File

@@ -1732,7 +1732,7 @@ proc genSetOp(p: BProc, e: PNode, d: var TLoc, op: TMagic) =
getTemp(p, getSysType(p.module.g.graph, unknownLineInfo(), tyInt), i) # our counter
initLocExpr(p, e.sons[1], a)
initLocExpr(p, e.sons[2], b)
if d.k == locNone: getTemp(p, a.t, d)
if d.k == locNone: getTemp(p, setType, d)
lineF(p, cpsStmts,
"for ($1 = 0; $1 < $2; $1++) $n" &
" $3[$1] = $4[$1] $6 $5[$1];$n", [

12
tests/ccgbugs/t9098.nim Normal file
View File

@@ -0,0 +1,12 @@
discard """
targets: "c cpp js"
output: '''
{'a', 'b'}
'''
"""
var x = new(ref set[char])
var y = new(ref set[char])
x[] = {'a'}
y[] = {'b'}
echo x[] + y[]