Thanks for the feedback. Fixed in r166400.<br><br><div class="gmail_quote">On Sun, Oct 21, 2012 at 2:37 AM, Dmitri Gribenko <span dir="ltr"><<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Lang,<br>
<div><div class="h5"><br>
On Sun, Oct 21, 2012 at 4:10 AM, Lang Hames <<a href="mailto:lhames@gmail.com">lhames@gmail.com</a>> wrote:<br>
> Author: lhames<br>
> Date: Sat Oct 20 20:10:01 2012<br>
> New Revision: 166383<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=166383&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=166383&view=rev</a><br>
> Log:<br>
> When used in a compound expression FP_CONTRACT should proceed all explicit<br>
> declarations and statements. Emit an error if the FP_CONTRACT is used<br>
> later in a compound statement.<br>
><br>
> Added:<br>
>     cfe/trunk/test/Parser/pragma-fp-contract.c<br>
> Modified:<br>
>     cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td<br>
>     cfe/trunk/lib/Parse/ParseStmt.cpp<br>
>     cfe/trunk/test/CodeGen/fp-contract-pragma.cpp<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=166383&r1=166382&r2=166383&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=166383&r1=166382&r2=166383&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)<br>
> +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Sat Oct 20 20:10:01 2012<br>
> @@ -729,6 +729,10 @@<br>
>    "expected '#pragma unused' argument to be a variable name">;<br>
>  def warn_pragma_unused_expected_punc : Warning<<br>
>    "expected ')' or ',' in '#pragma unused'">;<br>
> +// - #pragam fp_contract<br>
<br>
</div></div>Typo 'pragam'.<br>
<div><div class="h5"><br>
> +def err_pragma_fp_contract_scope : Error<<br>
> +  "'#pragma fp_contract' should only appear at file scope or at the start of a "<br>
> +  "compound expression">;<br>
><br>
>  // OpenCL Section 6.8.g<br>
>  def err_not_opencl_storage_class_specifier : Error<<br>
><br>
> Modified: cfe/trunk/lib/Parse/ParseStmt.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=166383&r1=166382&r2=166383&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=166383&r1=166382&r2=166383&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Parse/ParseStmt.cpp (original)<br>
> +++ cfe/trunk/lib/Parse/ParseStmt.cpp Sat Oct 20 20:10:01 2012<br>
> @@ -280,9 +280,10 @@<br>
>      return StmtEmpty();<br>
><br>
>    case tok::annot_pragma_fp_contract:<br>
> -    ProhibitAttributes(Attrs);<br>
> -    HandlePragmaFPContract();<br>
> -    return StmtEmpty();<br>
> +    Diag(Tok, diag::err_pragma_fp_contract_scope);<br>
> +    ConsumeToken();<br>
> +    return StmtError();<br>
> +<br>
><br>
>    case tok::annot_pragma_opencl_extension:<br>
>      ProhibitAttributes(Attrs);<br>
> @@ -728,6 +729,10 @@<br>
><br>
>    StmtVector Stmts;<br>
><br>
> +  // Parse FP_CONTRACT if present.<br>
> +  if (Tok.is(tok::annot_pragma_fp_contract))<br>
> +    HandlePragmaFPContract();<br>
> +<br>
>    // "__label__ X, Y, Z;" is the GNU "Local Label" extension.  These are<br>
>    // only allowed at the start of a compound stmt regardless of the language.<br>
>    while (Tok.is(tok::kw___label__)) {<br>
><br>
> Modified: cfe/trunk/test/CodeGen/fp-contract-pragma.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/fp-contract-pragma.cpp?rev=166383&r1=166382&r2=166383&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/fp-contract-pragma.cpp?rev=166383&r1=166382&r2=166383&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CodeGen/fp-contract-pragma.cpp (original)<br>
> +++ cfe/trunk/test/CodeGen/fp-contract-pragma.cpp Sat Oct 20 20:10:01 2012<br>
> @@ -39,7 +39,6 @@<br>
>    float method(float a, float b, float c) {<br>
>      #pragma STDC FP_CONTRACT ON<br>
>      return a * b + c;<br>
> -    #pragma STDC FP_CONTRACT OFF<br>
>    }<br>
>  };<br>
><br>
><br>
> Added: cfe/trunk/test/Parser/pragma-fp-contract.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/pragma-fp-contract.c?rev=166383&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/pragma-fp-contract.c?rev=166383&view=auto</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/Parser/pragma-fp-contract.c (added)<br>
> +++ cfe/trunk/test/Parser/pragma-fp-contract.c Sat Oct 20 20:10:01 2012<br>
> @@ -0,0 +1,6 @@<br>
> +// RUN: %clang_cc1 -fsyntax-only -verify %s<br>
> +<br>
> +void f1(void) {<br>
> +  int x = 0;<br>
> +/* expected-error {{'#pragma fp_contract' should only appear at file scope or at the start of a compound expression}} */ #pragma STDC FP_CONTRACT ON<br>
<br>
</div></div>It might be cleaner to use expected-error@+1 and move the message to<br>
the previous line.<br>
<span class="HOEnZb"><font color="#888888"><br>
Dmitri<br>
<br>
--<br>
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if<br>
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <<a href="mailto:gribozavr@gmail.com">gribozavr@gmail.com</a>>*/<br>
</font></span></blockquote></div><br>