]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc/hir/lowering/item.rs
ast: Keep `extern` qualifiers in functions more precisely
[rust.git] / src / librustc / hir / lowering / item.rs
index 4cd42927868d731550f298bbbce6ce4352b821c6..2dc7e014445d1eeb02ca3b196ae66172a4f1baa5 100644 (file)
@@ -735,7 +735,7 @@ fn lower_foreign_item(&mut self, i: &ForeignItem) -> hir::ForeignItem {
 
     fn lower_foreign_mod(&mut self, fm: &ForeignMod) -> hir::ForeignMod {
         hir::ForeignMod {
-            abi: self.lower_abi(fm.abi),
+            abi: fm.abi.map_or(abi::Abi::C, |abi| self.lower_abi(abi)),
             items: fm.items
                 .iter()
                 .map(|x| self.lower_foreign_item(x))
@@ -1283,7 +1283,7 @@ fn lower_fn_header(&mut self, h: FnHeader) -> hir::FnHeader {
             unsafety: h.unsafety,
             asyncness: self.lower_asyncness(h.asyncness.node),
             constness: h.constness.node,
-            abi: self.lower_abi(h.abi),
+            abi: self.lower_extern(h.ext),
         }
     }
 
@@ -1294,6 +1294,14 @@ pub(super) fn lower_abi(&mut self, abi: Abi) -> abi::Abi {
         })
     }
 
+    pub(super) fn lower_extern(&mut self, ext: Extern) -> abi::Abi {
+        match ext {
+            Extern::None => abi::Abi::Rust,
+            Extern::Implicit => abi::Abi::C,
+            Extern::Explicit(abi) => self.lower_abi(abi),
+        }
+    }
+
     fn error_on_invalid_abi(&self, abi: Abi) {
         struct_span_err!(
             self.sess,