about summary refs log tree commit diff
path: root/src/librustc_resolve
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-06-01 12:57:42 +0530
committerManish Goregaokar <manishsmail@gmail.com>2016-06-01 12:57:42 +0530
commiteba82bb569903ce4f96af8e90e2a55feca816634 (patch)
tree5567c797c9881b4a8f1bca8516658b09997efe06 /src/librustc_resolve
parent0e65b75b3922e9b700ebaec055418086c07ef8a3 (diff)
parentcde0f94a5272a1c00ebe04fc44e19e9e687c3fda (diff)
downloadrust-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.rs17
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);