diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2016-06-01 12:57:42 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2016-06-01 12:57:42 +0530 |
| commit | eba82bb569903ce4f96af8e90e2a55feca816634 (patch) | |
| tree | 5567c797c9881b4a8f1bca8516658b09997efe06 /src/librustc_resolve | |
| parent | 0e65b75b3922e9b700ebaec055418086c07ef8a3 (diff) | |
| parent | cde0f94a5272a1c00ebe04fc44e19e9e687c3fda (diff) | |
| download | rust-eba82bb569903ce4f96af8e90e2a55feca816634.tar.gz rust-eba82bb569903ce4f96af8e90e2a55feca816634.zip | |
Rollup merge of #33967 - dsprenkels:enum_pattern_resolve_ice, r=petrochenkov
resolve: record pattern def when `resolve_pattern` returns `Err(true)` I propose a fix for issue #33293. In 1a374b8, (pr #33046) fixed the error reporting of a specific case, but the change that was introduced did not make sure that `record_def` was called in all cases, which lead to an ICE in [1]. This change restores the original `else` case, but keeps the changes that were committed in 1a374b8. [1] `rustc::middle::mem_categorization::MemCategorizationContext::cat_pattern_`
Diffstat (limited to 'src/librustc_resolve')
| -rw-r--r-- | src/librustc_resolve/lib.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 2444f6acced..36053d3c4ff 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -2422,13 +2422,16 @@ impl<'a> Resolver<'a> { } } } - } else if let Err(false) = self.resolve_path(pat_id, &path, 0, ValueNS) { - resolve_error( - self, - path.span, - ResolutionError::UnresolvedEnumVariantStructOrConst( - &path.segments.last().unwrap().identifier.name.as_str()) - ); + } else { + if let Err(false) = self.resolve_path(pat_id, &path, 0, ValueNS) { + // No error has been reported, so we need to do this ourselves. + resolve_error( + self, + path.span, + ResolutionError::UnresolvedEnumVariantStructOrConst( + &path.segments.last().unwrap().identifier.name.as_str()) + ); + } self.record_def(pattern.id, err_path_resolution()); } visit::walk_path(self, path); |
