[PATCH] Implementation of #pragma (data|code|const|bss)_seg

Warren Hunt whunt at google.com
Fri Mar 14 14:15:36 PDT 2014


  Ping.

  Also, I looked at all of the Microsoft pragams and 6 of them use a labeled stack data_seg, bss_seg, const_seg, code_seg, pack and conform.  If we choose to template MSSegmentStack, we can reasonably pull in pack (a value of 0 isn't a ligitimate argument and can be used, like nullptr, to indicate that we're pushing or poping w/o changing the setting). Putting in conform is much trickier because conform takes multiple extra arguments.  There is significantly more error checking code in the pragma pack handler than in the ms one (for example #pragma_bss(pop) with no stack or after a reset is a no-op not an error).  Fusing the logic for stack with the others would either involve a bunch of special-casing or we'd end up having much stricter rules about how some of these pragmas work than msvc does.

  Pragmas float_control, managed, unmanaged, strict_gs_check, warning and vtordisp use an unlabeled stack.  the first 4 push booleans, as does vtordisp, although in a slightly different way.  warning pushes a small integer.

http://llvm-reviews.chandlerc.com/D3065



More information about the cfe-commits mailing list