[cfe-commits] r166383 - in /cfe/trunk: include/clang/Basic/DiagnosticParseKinds.td lib/Parse/ParseStmt.cpp test/CodeGen/fp-contract-pragma.cpp test/Parser/pragma-fp-contract.c

Lang Hames lhames at gmail.com
Sun Oct 21 12:58:44 PDT 2012


Thanks for the feedback. Fixed in r166400.

On Sun, Oct 21, 2012 at 2:37 AM, Dmitri Gribenko <gribozavr at gmail.com>wrote:

> Hi Lang,
>
> On Sun, Oct 21, 2012 at 4:10 AM, Lang Hames <lhames at gmail.com> wrote:
> > Author: lhames
> > Date: Sat Oct 20 20:10:01 2012
> > New Revision: 166383
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=166383&view=rev
> > Log:
> > When used in a compound expression FP_CONTRACT should proceed all
> explicit
> > declarations and statements. Emit an error if the FP_CONTRACT is used
> > later in a compound statement.
> >
> > Added:
> >     cfe/trunk/test/Parser/pragma-fp-contract.c
> > Modified:
> >     cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
> >     cfe/trunk/lib/Parse/ParseStmt.cpp
> >     cfe/trunk/test/CodeGen/fp-contract-pragma.cpp
> >
> > Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=166383&r1=166382&r2=166383&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
> > +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Sat Oct 20
> 20:10:01 2012
> > @@ -729,6 +729,10 @@
> >    "expected '#pragma unused' argument to be a variable name">;
> >  def warn_pragma_unused_expected_punc : Warning<
> >    "expected ')' or ',' in '#pragma unused'">;
> > +// - #pragam fp_contract
>
> Typo 'pragam'.
>
> > +def err_pragma_fp_contract_scope : Error<
> > +  "'#pragma fp_contract' should only appear at file scope or at the
> start of a "
> > +  "compound expression">;
> >
> >  // OpenCL Section 6.8.g
> >  def err_not_opencl_storage_class_specifier : Error<
> >
> > Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=166383&r1=166382&r2=166383&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
> > +++ cfe/trunk/lib/Parse/ParseStmt.cpp Sat Oct 20 20:10:01 2012
> > @@ -280,9 +280,10 @@
> >      return StmtEmpty();
> >
> >    case tok::annot_pragma_fp_contract:
> > -    ProhibitAttributes(Attrs);
> > -    HandlePragmaFPContract();
> > -    return StmtEmpty();
> > +    Diag(Tok, diag::err_pragma_fp_contract_scope);
> > +    ConsumeToken();
> > +    return StmtError();
> > +
> >
> >    case tok::annot_pragma_opencl_extension:
> >      ProhibitAttributes(Attrs);
> > @@ -728,6 +729,10 @@
> >
> >    StmtVector Stmts;
> >
> > +  // Parse FP_CONTRACT if present.
> > +  if (Tok.is(tok::annot_pragma_fp_contract))
> > +    HandlePragmaFPContract();
> > +
> >    // "__label__ X, Y, Z;" is the GNU "Local Label" extension.  These are
> >    // only allowed at the start of a compound stmt regardless of the
> language.
> >    while (Tok.is(tok::kw___label__)) {
> >
> > Modified: cfe/trunk/test/CodeGen/fp-contract-pragma.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/fp-contract-pragma.cpp?rev=166383&r1=166382&r2=166383&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/CodeGen/fp-contract-pragma.cpp (original)
> > +++ cfe/trunk/test/CodeGen/fp-contract-pragma.cpp Sat Oct 20 20:10:01
> 2012
> > @@ -39,7 +39,6 @@
> >    float method(float a, float b, float c) {
> >      #pragma STDC FP_CONTRACT ON
> >      return a * b + c;
> > -    #pragma STDC FP_CONTRACT OFF
> >    }
> >  };
> >
> >
> > Added: cfe/trunk/test/Parser/pragma-fp-contract.c
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/pragma-fp-contract.c?rev=166383&view=auto
> >
> ==============================================================================
> > --- cfe/trunk/test/Parser/pragma-fp-contract.c (added)
> > +++ cfe/trunk/test/Parser/pragma-fp-contract.c Sat Oct 20 20:10:01 2012
> > @@ -0,0 +1,6 @@
> > +// RUN: %clang_cc1 -fsyntax-only -verify %s
> > +
> > +void f1(void) {
> > +  int x = 0;
> > +/* expected-error {{'#pragma fp_contract' should only appear at file
> scope or at the start of a compound expression}} */ #pragma STDC
> FP_CONTRACT ON
>
> It might be cleaner to use expected-error at +1 and move the message to
> the previous line.
>
> Dmitri
>
> --
> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121021/69e4207d/attachment.html>


More information about the cfe-commits mailing list