This is an archive of the discontinued LLVM Phabricator instance.

[DebugInfo] LiveDebugValues: correctly discriminate between kinds of variable locations
ClosedPublic

Authored by jmorse on Aug 28 2019, 10:08 AM.

Details

Summary

The missing line added by this patch ensures that only spilt variable locations are candidates for being restored from the stack. Otherwise, register or constant-value information can be interpreted as a spill location, through a union.

The added regression test replicates a scenario where this occurs: the stack load from [rsp] causes the register-location DBG_VALUE to be "restored" to rsi, when it should be left alone. See PR43058 for details.

Un x-fail a test that was suffering from this from a previous patch.

This causes a clang-3.4 build to gain 2% more scope-covered bytes, because the scenario in the regression test was interfering with stack variable locations created by LiveDebugVariables.

Diff Detail