aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/tests/coercion.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2021-05-25 10:15:02 +0100
committerFlorian Diebold <[email protected]>2021-05-25 10:15:02 +0100
commitb26a472ccb32a520eb809505a7dc465f8050268f (patch)
treea74c14f9e99375a75ecfa2efb4c2ea0a6544fb46 /crates/hir_ty/src/tests/coercion.rs
parent8b049ec393230e4b9fea3022a3ebf34e2af5395d (diff)
Fix type mismatch caused by macros
MacroStmts should be completely transparent, but it prevented coercion. (I should maybe give `infer_expr` and `infer_expr_inner` better names.)
Diffstat (limited to 'crates/hir_ty/src/tests/coercion.rs')
-rw-r--r--crates/hir_ty/src/tests/coercion.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/crates/hir_ty/src/tests/coercion.rs b/crates/hir_ty/src/tests/coercion.rs
index bb568ea37..7e9fc8735 100644
--- a/crates/hir_ty/src/tests/coercion.rs
+++ b/crates/hir_ty/src/tests/coercion.rs
@@ -912,3 +912,47 @@ fn test() -> i32 {
912 "#, 912 "#,
913 ) 913 )
914} 914}
915
916#[test]
917fn panic_macro() {
918 check_infer_with_mismatches(
919 r#"
920mod panic {
921 #[macro_export]
922 pub macro panic_2015 {
923 () => (
924 $crate::panicking::panic("explicit panic")
925 ),
926 }
927}
928
929mod panicking {
930 pub fn panic() -> ! { loop {} }
931}
932
933#[rustc_builtin_macro = "core_panic"]
934macro_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
942fn 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}