rust/compiler/rustc_mir/src/transform
bors 1c2c6b6700 Auto merge of #84582 - richkadel:issue-84561, r=tmandry
Vastly improves coverage spans for macros

Fixes: #84561

This resolves problems where macros like `trace!(...)` would show zero coverage if tracing was disabled, and `assert_eq!(...)` would show zero coverage if the assertion did not fail, because only one coverage span was generated, for the branch.

This PR started with an idea that I could just drop branching blocks with same span as expanded macro. (See the fixed issue for more details.)

That did help, but it didn't resolve everything.

I also needed to add a span specifically for the macro name (plus `!`) to ensure the macro gets coverage even if it's internal expansion adds conditional branching blocks that are retained, and would otherwise drop the outer span. Now that outer span is _only_ the `(argument, list)`, which can safely be dropped now), because the macro name has its own span.

While testing, I also noticed the spanview debug output can cause an ICE on a function with no body. The
workaround for this is included in this PR (separate commit).

r? `@tmandry`
cc? `@wesleywiser`
2021-05-01 07:48:24 +00:00
..
check_consts don't let const_fn feature flag affect impl-block-level trait bounds 2021-04-29 09:27:45 +02:00
coverage Rebuilt out of date tests and fixed an old bug now exposed 2021-04-30 01:10:48 -07:00
inline Use small hash set in mir_inliner_callees 2021-02-24 00:00:00 +00:00
add_call_guards.rs Remember the MirSource for each Body 2020-10-04 11:01:38 -07:00
add_moves_for_packed_drops.rs Replace (Body, DefId) with Body where possible 2020-10-04 16:07:03 -07:00
add_retag.rs Retagging: do not retag 'raw reborrows' 2020-10-31 15:31:27 +01:00
check_const_item_mutation.rs Suppress CONST_ITEM_MUTATION lint if a dereference occurs anywhere 2020-12-17 15:25:55 -05:00
check_packed_ref.rs make unaligned_refereces future-incompat lint warn-by-default, and remove the safe_packed_borrows lint that it replaces 2021-03-27 16:59:37 +01:00
check_unsafety.rs unsafety checking: no longer care about is_min_const_fn 2021-04-25 12:53:05 +02:00
cleanup_post_borrowck.rs Remember the MirSource for each Body 2020-10-04 11:01:38 -07:00
const_debuginfo.rs Disable the constant debuginfo promotion pass by default 2020-12-14 19:56:10 -05:00
const_goto.rs Bump all mir_opt_level 3 to 4 2021-03-05 17:13:56 -03:00
const_prop.rs Tidy 2021-04-20 09:30:28 -04:00
deaggregator.rs Remember the MirSource for each Body 2020-10-04 11:01:38 -07:00
deduplicate_blocks.rs Use iter::zip in compiler/ 2021-03-26 09:32:31 -07:00
dest_prop.rs Use AnonConst for asm! constants 2021-04-06 12:35:41 +01:00
dump_mir.rs Remember the MirSource for each Body 2020-10-04 11:01:38 -07:00
early_otherwise_branch.rs Mark early otherwise optimization unsound 2021-03-18 20:57:44 -03:00
elaborate_drops.rs Prepare mir::Constant for ty::Const only supporting valtrees 2021-03-12 12:43:54 +00:00
function_item_references.rs Review changes 2021-01-16 18:56:37 -05:00
generator.rs Don't concatenate binders across types 2021-04-05 00:41:08 -04:00
inline.rs extract ConstKind::Unevaluated into a struct 2021-03-20 17:21:44 +01:00
instcombine.rs move to separate pass, cache layouts 2021-03-16 21:34:31 -04:00
lower_intrinsics.rs Prepare mir::Constant for ty::Const only supporting valtrees 2021-03-12 12:43:54 +00:00
match_branches.rs Use iter::zip in compiler/ 2021-03-26 09:32:31 -07:00
mod.rs make unaligned_refereces future-incompat lint warn-by-default, and remove the safe_packed_borrows lint that it replaces 2021-03-27 16:59:37 +01:00
multiple_return_terminators.rs Bump all mir_opt_level 3 to 4 2021-03-05 17:13:56 -03:00
no_landing_pads.rs Visit only terminators when removing landing pads 2021-01-18 00:00:00 +00:00
nrvo.rs Extract mir_opt_level to a method and use Option to be able to know if the value is provided or not 2021-03-05 17:13:56 -03:00
promote_consts.rs Use AnonConst for asm! constants 2021-04-06 12:35:41 +01:00
remove_noop_landing_pads.rs Switch to changing cp_non_overlap in tform 2021-03-09 16:54:14 +00:00
remove_storage_markers.rs Remove storage markers if they won't be used during code generation 2021-02-28 20:10:44 +01:00
remove_unneeded_drops.rs Visit only terminators when removing unneeded drops 2021-01-17 00:00:00 +00:00
remove_zsts.rs RemoveZsts: don't touch unions 2021-03-24 13:00:36 -04:00
required_consts.rs extract ConstKind::Unevaluated into a struct 2021-03-20 17:21:44 +01:00
rustc_peek.rs Prepare mir::Constant for ty::Const only supporting valtrees 2021-03-12 12:43:54 +00:00
simplify.rs Auto merge of #83177 - erikdesjardins:zstassign, r=oli-obk 2021-03-23 12:23:27 +00:00
simplify_branches.rs Simplify assert terminator only if condition evaluates to expected value 2020-10-21 00:00:00 +00:00
simplify_comparison_integral.rs Prepare mir::Constant for ty::Const only supporting valtrees 2021-03-12 12:43:54 +00:00
simplify_try.rs Drive-by formatting of comment 2021-02-21 21:22:04 +01:00
uninhabited_enum_branching.rs Refactor how SwitchInt stores jump targets 2020-10-10 17:46:11 +02:00
unreachable_prop.rs Bump all mir_opt_level 3 to 4 2021-03-05 17:13:56 -03:00
validate.rs Clean up todos 2021-03-09 19:31:31 +00:00