Skip to content

Commit 3c69d97

Browse files
committed
Add missing builtin mappings for never type
1 parent 1e54c67 commit 3c69d97

File tree

6 files changed

+32
-4
lines changed

6 files changed

+32
-4
lines changed

gcc/rust/hir/rust-ast-lower-type.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,19 @@ class ASTLoweringType : public ASTLoweringBase
291291
translated);
292292
}
293293

294+
void visit (AST::NeverType &type) override
295+
{
296+
auto crate_num = mappings->get_current_crate ();
297+
Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
298+
mappings->get_next_hir_id (crate_num),
299+
mappings->get_next_localdef_id (crate_num));
300+
301+
translated = new HIR::NeverType (mapping, type.get_locus ());
302+
303+
mappings->insert_hir_type (mapping.get_crate_num (), mapping.get_hirid (),
304+
translated);
305+
}
306+
294307
void visit (AST::TraitObjectTypeOneBound &type) override;
295308

296309
void visit (AST::TraitObjectType &type) override;

gcc/rust/resolve/rust-ast-resolve-type.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,12 @@ ResolveType::visit (AST::InferredType &type)
197197
ok = true;
198198
}
199199

200+
void
201+
ResolveType::visit (AST::NeverType &type)
202+
{
203+
ok = true;
204+
}
205+
200206
void
201207
ResolveType::visit (AST::SliceType &type)
202208
{

gcc/rust/resolve/rust-ast-resolve-type.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,8 @@ class ResolveType : public ResolverBase
386386

387387
void visit (AST::InferredType &type) override;
388388

389+
void visit (AST::NeverType &type) override;
390+
389391
void visit (AST::RawPointerType &type) override;
390392

391393
void visit (AST::TraitObjectTypeOneBound &type) override;

gcc/rust/resolve/rust-ast-resolve.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ Resolver::generate_builtins ()
187187
auto isize = new TyTy::ISizeType (mappings->get_next_hir_id ());
188188
auto char_tyty = new TyTy::CharType (mappings->get_next_hir_id ());
189189
auto str = new TyTy::StrType (mappings->get_next_hir_id ());
190+
auto never = new TyTy::NeverType (mappings->get_next_hir_id ());
190191

191192
MKBUILTIN_TYPE ("u8", builtins, u8);
192193
MKBUILTIN_TYPE ("u16", builtins, u16);
@@ -205,6 +206,7 @@ Resolver::generate_builtins ()
205206
MKBUILTIN_TYPE ("isize", builtins, isize);
206207
MKBUILTIN_TYPE ("char", builtins, char_tyty);
207208
MKBUILTIN_TYPE ("str", builtins, str);
209+
MKBUILTIN_TYPE ("!", builtins, never);
208210

209211
// unit type ()
210212
TyTy::TupleType *unit_tyty

gcc/rust/typecheck/rust-hir-type-check-type.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,15 @@ class TypeCheckType : public TypeCheckBase
145145
type.get_locus ());
146146
}
147147

148+
void visit (HIR::NeverType &type) override
149+
{
150+
TyTy::BaseType *lookup = nullptr;
151+
bool ok = context->lookup_builtin ("!", &lookup);
152+
rust_assert (ok);
153+
154+
translated = lookup->clone ();
155+
}
156+
148157
void visit (HIR::TraitObjectType &type) override;
149158

150159
private:

gcc/testsuite/rust/compile/never_type_err2.rs

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)