Fix rare undefined asm temp end label error in x86
authorZejun Wu <watashi@fb.com>
Sun, 28 Oct 2018 16:22:25 +0000 (12:22 -0400)
committerBen Gamari <ben@smart-cactus.org>
Sun, 28 Oct 2018 17:32:38 +0000 (13:32 -0400)
commit38618f7474d803b1f89cbc3ea50c0a5528484585
tree8c4972df33bda5bc1b0c2b3d80d9c153f3161955
parent2e23e1c7de01c92b038e55ce53d11bf9db993dd4
Fix rare undefined asm temp end label error in x86

Summary:
Encountered assembly error due to undefined label `.LcaDcU_info_end` for
following code generated by `pprFrameProc`:

```
.Lsat_sa8fp{v}_info_fde_end:
  .long .Lblock{v caDcU}_info_fde_end-.Lblock{v caDcU}_info_fde
.Lblock{v caDcU}_info_fde:
  .long _nbHlD-.Lsection_frame
  .quad block{v caDcU}_info-1
  .quad .Lblock{v caDcU}_info_end-block{v caDcU}_info+1
  .byte 1
```

This diff fixed the error.

Test Plan:
  ./validate

Also the case where we used to have assembly error is now fixed.
Unfortunately, I have limited insight here and cannot get a small enough repro
or test case for this.

Ben says:

> I think I see: Previously we only produced end symbols for the info
> tables of top-level procedures. However, blocks within a procedure may
> also have info tables, we will dutifully generate debug information for
> and consequently we get undefined symbols.

Reviewers: simonmar, scpmw, last_g, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

Differential Revision: https://phabricator.haskell.org/D5246

(cherry picked from commit cf961dcf5ebc26cbd960196ba387736334088303)
compiler/nativeGen/X86/Ppr.hs