Skip to content

Commit 4564a4f

Browse files
powerboat9CohenArthur
authored andcommitted
Fix name resolution 2.0 definition lookups in unsafe checker
gcc/rust/ChangeLog: * checks/errors/rust-unsafe-checker.cc: Add includes. (UnsafeChecker::visit): Use 2.0 version of resolver when name resolution 2.0 is enabled. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery <[email protected]>
1 parent c220250 commit 4564a4f

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

gcc/rust/checks/errors/rust-unsafe-checker.cc

+38-4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
#include "rust-hir-item.h"
2424
#include "rust-attribute-values.h"
2525
#include "rust-system.h"
26+
#include "rust-immutable-name-resolution-context.h"
27+
28+
// for flag_name_resolution_2_0
29+
#include "options.h"
2630

2731
namespace Rust {
2832
namespace HIR {
@@ -216,8 +220,23 @@ UnsafeChecker::visit (PathInExpression &path)
216220
NodeId ast_node_id = path.get_mappings ().get_nodeid ();
217221
NodeId ref_node_id;
218222

219-
if (!resolver.lookup_resolved_name (ast_node_id, &ref_node_id))
220-
return;
223+
if (flag_name_resolution_2_0)
224+
{
225+
auto &nr_ctx
226+
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
227+
228+
auto resolved = nr_ctx.lookup (ast_node_id);
229+
230+
if (!resolved.has_value ())
231+
return;
232+
233+
ref_node_id = resolved.value ();
234+
}
235+
else
236+
{
237+
if (!resolver.lookup_resolved_name (ast_node_id, &ref_node_id))
238+
return;
239+
}
221240

222241
if (auto definition_id = mappings.lookup_node_to_hir (ref_node_id))
223242
{
@@ -418,8 +437,23 @@ UnsafeChecker::visit (CallExpr &expr)
418437
// There are no unsafe types, and functions are defined in the name resolver.
419438
// If we can't find the name, then we're dealing with a type and should return
420439
// early.
421-
if (!resolver.lookup_resolved_name (ast_node_id, &ref_node_id))
422-
return;
440+
if (flag_name_resolution_2_0)
441+
{
442+
auto &nr_ctx
443+
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
444+
445+
auto resolved = nr_ctx.lookup (ast_node_id);
446+
447+
if (!resolved.has_value ())
448+
return;
449+
450+
ref_node_id = resolved.value ();
451+
}
452+
else
453+
{
454+
if (!resolver.lookup_resolved_name (ast_node_id, &ref_node_id))
455+
return;
456+
}
423457

424458
if (auto definition_id = mappings.lookup_node_to_hir (ref_node_id))
425459
{

gcc/testsuite/rust/compile/nr2/exclude

-6
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,6 @@ traits9.rs
191191
type-bindings1.rs
192192
unconstrained_type_param.rs
193193
undeclared_label.rs
194-
unsafe1.rs
195-
unsafe11.rs
196-
unsafe2.rs
197-
unsafe3.rs
198-
unsafe6.rs
199-
unsafe7.rs
200194
use_1.rs
201195
use_2.rs
202196
v0-mangle1.rs

0 commit comments

Comments
 (0)