Thanks for the feedback. Fixed in r166400. On Sun, Oct 21, 2012 at 2:37 AM, Dmitri Gribenko <[email protected]>wrote:
> Hi Lang, > > On Sun, Oct 21, 2012 at 4:10 AM, Lang Hames <[email protected]> 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@+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 <[email protected]>*/ >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
