aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-03-18 15:18:21 +0000
committerPhilip Herron <herron.philip@googlemail.com>2021-03-19 08:44:25 +0000
commitf0750d7091a7f9014d4327cc13f4625af2da2500 (patch)
tree0022208828fa5c37ddfbaeca23a75f1a8eb28c55 /gcc/rust
parent196476601e64a954ad10fb0a728038aedae93155 (diff)
downloadgcc-f0750d7091a7f9014d4327cc13f4625af2da2500.zip
gcc-f0750d7091a7f9014d4327cc13f4625af2da2500.tar.gz
gcc-f0750d7091a7f9014d4327cc13f4625af2da2500.tar.bz2
Fix type unification for Inference Variables and return types
When we resolve the type of an expression such as a LiteralExpr with HIR id 10, but is the final expression in a BlockExpr of HirId 11. The same type is infered for the entire BlockExpr as well as the final Expr but we override the reference id on the TyTy::Type. This means if there is a change in reference id the old ID must be added to the combined reference chain for type inference to take place. Fixes #293
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/typecheck/rust-tyty.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h
index 9fe7417..2d97a0b 100644
--- a/gcc/rust/typecheck/rust-tyty.h
+++ b/gcc/rust/typecheck/rust-tyty.h
@@ -57,7 +57,12 @@ public:
HirId get_ref () const { return ref; }
- void set_ref (HirId id) { ref = id; }
+ void set_ref (HirId id)
+ {
+ if (id != ref)
+ append_reference (ref);
+ ref = id;
+ }
HirId get_ty_ref () const { return ty_ref; }