diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-04-27 17:43:07 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-04-27 17:43:07 +0100 |
commit | 3539a0392fd651c19d06f0c965b03628772033ff (patch) | |
tree | 8910e99ded3e0067acbe8e069648ffed68164c77 | |
parent | 6647bc65b1a2d3ba581674a9ca22d4ef7a959914 (diff) | |
download | gcc-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.h | 6 | ||||
-rw-r--r-- | gcc/testsuite/rust.test/xfail_compile/generic-default1.rs | 9 |
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); +} |