aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-04-27 17:43:07 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-04-27 17:43:07 +0100
commit3539a0392fd651c19d06f0c965b03628772033ff (patch)
tree8910e99ded3e0067acbe8e069648ffed68164c77
parent6647bc65b1a2d3ba581674a9ca22d4ef7a959914 (diff)
downloadgcc-3539a0392fd651c19d06f0c965b03628772033ff.zip
gcc-3539a0392fd651c19d06f0c965b03628772033ff.tar.gz
gcc-3539a0392fd651c19d06f0c965b03628772033ff.tar.bz2
Name resolve any specified types in TypeParams
Type parameters can have defaults these need to be name resolved. Addresses: #307
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-type.h6
-rw-r--r--gcc/testsuite/rust.test/xfail_compile/generic-default1.rs9
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-type.h b/gcc/rust/resolve/rust-ast-resolve-type.h
index b999c41..3d61591 100644
--- a/gcc/rust/resolve/rust-ast-resolve-type.h
+++ b/gcc/rust/resolve/rust-ast-resolve-type.h
@@ -265,6 +265,12 @@ public:
"generic param redefined multiple times");
rust_error_at (locus, "was defined here");
});
+
+ // if it has a type lets resolve it
+ if (param.has_type ())
+ {
+ ResolveType::go (param.get_type ().get (), param.get_node_id ());
+ }
}
private:
diff --git a/gcc/testsuite/rust.test/xfail_compile/generic-default1.rs b/gcc/testsuite/rust.test/xfail_compile/generic-default1.rs
new file mode 100644
index 0000000..e5f94910
--- /dev/null
+++ b/gcc/testsuite/rust.test/xfail_compile/generic-default1.rs
@@ -0,0 +1,9 @@
+// { dg-error "unresolved type" "" { target { *-*-* } } 0 }
+
+struct Foo<A = i321>(A);
+// { dg-error "failed to resolve TypePath: i321" "" { target *-*-* } .-1 }
+
+fn main() {
+ let a;
+ a = Foo(123);
+}