File tree 2 files changed +45
-1
lines changed
2 files changed +45
-1
lines changed Original file line number Diff line number Diff line change @@ -805,7 +805,7 @@ impl<'a> InferenceContext<'a> {
805
805
None => self . table . new_float_var ( ) ,
806
806
} ,
807
807
} ,
808
- Expr :: MacroStmts { tail } => self . infer_expr ( * tail, expected) ,
808
+ Expr :: MacroStmts { tail } => self . infer_expr_inner ( * tail, expected) ,
809
809
} ;
810
810
// use a new type variable if we got unknown here
811
811
let ty = self . insert_type_vars_shallow ( ty) ;
Original file line number Diff line number Diff line change @@ -912,3 +912,47 @@ fn test() -> i32 {
912
912
"# ,
913
913
)
914
914
}
915
+
916
+ #[ test]
917
+ fn panic_macro ( ) {
918
+ check_infer_with_mismatches (
919
+ r#"
920
+ mod panic {
921
+ #[macro_export]
922
+ pub macro panic_2015 {
923
+ () => (
924
+ $crate::panicking::panic("explicit panic")
925
+ ),
926
+ }
927
+ }
928
+
929
+ mod panicking {
930
+ pub fn panic() -> ! { loop {} }
931
+ }
932
+
933
+ #[rustc_builtin_macro = "core_panic"]
934
+ macro_rules! panic {
935
+ // Expands to either `$crate::panic::panic_2015` or `$crate::panic::panic_2021`
936
+ // depending on the edition of the caller.
937
+ ($($arg:tt)*) => {
938
+ /* compiler built-in */
939
+ };
940
+ }
941
+
942
+ fn main() {
943
+ panic!("internal error: entered unreachable code")
944
+ }
945
+ "# ,
946
+ expect ! [ [ r#"
947
+ 190..201 '{ loop {} }': !
948
+ 192..199 'loop {}': !
949
+ 197..199 '{}': ()
950
+ !0..24 '$crate...:panic': fn panic() -> !
951
+ !0..42 '$crate...anic")': !
952
+ !0..42 '$crate...anic")': !
953
+ !0..70 '$crate...code")': !
954
+ !25..41 '"expli...panic"': &str
955
+ 470..528 '{ ...de") }': ()
956
+ "# ] ] ,
957
+ ) ;
958
+ }
You can’t perform that action at this time.
0 commit comments