about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEric Holk <ericholk@microsoft.com>2022-10-11 16:37:54 -0700
committerEric Holk <ericholk@microsoft.com>2022-10-11 16:37:54 -0700
commit3db41d13f08db377c9bc516d8f285f61ed668edd (patch)
tree5bc25889c5eeeeafcd5bc33e281df24f2341bcd8
parent0c158f0e9d708e7705249bca8e38757ebf2e5c8c (diff)
downloadrust-3db41d13f08db377c9bc516d8f285f61ed668edd.tar.gz
rust-3db41d13f08db377c9bc516d8f285f61ed668edd.zip
wip: trying to enable #[track_caller] on async fn
-rw-r--r--compiler/rustc_ast_lowering/src/expr.rs20
-rw-r--r--compiler/rustc_ast_lowering/src/item.rs2
-rw-r--r--src/test/ui/async-await/panic-track-caller.rs (renamed from src/test/ui/async-await/panic-no-track-caller.rs)1
3 files changed, 21 insertions, 2 deletions
diff --git a/compiler/rustc_ast_lowering/src/expr.rs b/compiler/rustc_ast_lowering/src/expr.rs
index 46886c518af..61d91874e61 100644
--- a/compiler/rustc_ast_lowering/src/expr.rs
+++ b/compiler/rustc_ast_lowering/src/expr.rs
@@ -617,8 +617,26 @@ impl<'hir> LoweringContext<'_, 'hir> {
 
             hir::ExprKind::Closure(c)
         };
+        let generator_hir_id = self.lower_node_id(closure_node_id);
+        // FIXME: only add track caller if the parent is track_caller
+        self.lower_attrs(
+            generator_hir_id,
+            &[Attribute {
+                kind: AttrKind::Normal(ptr::P(NormalAttr {
+                    item: AttrItem {
+                        path: Path::from_ident(Ident::new(sym::track_caller, span)),
+                        args: MacArgs::Empty,
+                        tokens: None,
+                    },
+                    tokens: None,
+                })),
+                id: self.tcx.sess.parse_sess.attr_id_generator.mk_attr_id(),
+                style: AttrStyle::Outer,
+                span,
+            }],
+        );
         let generator = hir::Expr {
-            hir_id: self.lower_node_id(closure_node_id),
+            hir_id: generator_hir_id,
             kind: generator_kind,
             span: self.lower_span(span),
         };
diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs
index 9a46444d823..e9cc53b7138 100644
--- a/compiler/rustc_ast_lowering/src/item.rs
+++ b/compiler/rustc_ast_lowering/src/item.rs
@@ -86,7 +86,7 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
             impl_trait_defs: Vec::new(),
             impl_trait_bounds: Vec::new(),
             allow_try_trait: Some([sym::try_trait_v2, sym::yeet_desugar_details][..].into()),
-            allow_gen_future: Some([sym::gen_future][..].into()),
+            allow_gen_future: Some([sym::gen_future, sym::closure_track_caller][..].into()),
             allow_into_future: Some([sym::into_future][..].into()),
             generics_def_id_map: Default::default(),
         };
diff --git a/src/test/ui/async-await/panic-no-track-caller.rs b/src/test/ui/async-await/panic-track-caller.rs
index 934764912d3..76776d41c57 100644
--- a/src/test/ui/async-await/panic-no-track-caller.rs
+++ b/src/test/ui/async-await/panic-track-caller.rs
@@ -1,5 +1,6 @@
 // run-pass
 // edition:2021
+#![feature(closure_track_caller)]
 
 use std::future::Future;
 use std::panic;