<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">I’m working on a patch to add a new pragma.  <a href="https://reviews.llvm.org/D72841">
https://reviews.llvm.org/D72841</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Some forms of the pragma are only allowed at file scope.  When parsing the pragma I used this expression to test if at file scope:<o:p></o:p></p>
<p class="MsoNormal">(Actions.getCurScope()->getParent() == nullptr)<o:p></o:p></p>
<p class="MsoNormal">I also tried<o:p></o:p></p>
<p class="MsoNormal">(Actions.CurContext->isTranslationUnit())<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Both methods failed to recognize that the token following the end of the function body is at file scope.  In the debugger I can see that after the pragma parsing is complete, there is a call to ConsumeBrace which has been called in turn
 by consumeClose<ParseCompoundStatementBody<ParseFunctionStatementBody<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">So this means that the function body isn’t closed up until after all the following pragma’s have been parsed. Is this the right way to do things or should the function be closed when the brace is seen?  It’s surprising to me. Thanks in
 advance for any insight –Melanie <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Void f() {<o:p></o:p></p>
<p class="MsoNormal">Do stuff;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal">#pragma float_control(push) <<< The push pragma should only appear at file scope but the function scope hasn’t been closed when the pragma is parsed.
<o:p></o:p></p>
</div>
</body>
</html>