From dc34d8df4c48b3a8f474360970cae8a58e6c84f0 Mon Sep 17 00:00:00 2001 From: Serge Pavlov Date: Fri, 1 Jul 2022 15:32:56 +0700 Subject: [PATCH] Revert "[FPEnv] Allow CompoundStmt to keep FP options" On some buildbots test `ast-print-fp-pragmas.c` fails, need to investigate it. This reverts commit 0401fd12d4aa0553347fe34d666fb236d8719173. This reverts commit b822efc7404bf09ccfdc1ab7657475026966c3b2. --- clang/include/clang/AST/JSONNodeDumper.h | 2 - clang/include/clang/AST/Stmt.h | 38 +- clang/include/clang/AST/TextNodeDumper.h | 1 - clang/include/clang/Basic/LangOptions.h | 13 - clang/include/clang/Sema/ScopeInfo.h | 7 +- clang/lib/AST/ASTImporter.cpp | 7 +- clang/lib/AST/JSONNodeDumper.cpp | 15 - clang/lib/AST/Stmt.cpp | 24 +- clang/lib/AST/StmtPrinter.cpp | 62 --- clang/lib/AST/TextNodeDumper.cpp | 6 - clang/lib/Analysis/BodyFarm.cpp | 3 +- clang/lib/Basic/LangOptions.cpp | 9 - clang/lib/CodeGen/CGCoroutine.cpp | 4 +- clang/lib/Sema/Sema.cpp | 3 +- clang/lib/Sema/SemaDeclCXX.cpp | 8 +- clang/lib/Sema/SemaExprCXX.cpp | 5 +- clang/lib/Sema/SemaOpenMP.cpp | 9 +- clang/lib/Sema/SemaStmt.cpp | 11 +- clang/lib/Serialization/ASTReaderStmt.cpp | 8 +- clang/lib/Serialization/ASTWriterStmt.cpp | 3 - clang/test/AST/ast-dump-fpfeatures.cpp | 46 -- clang/test/AST/ast-dump-pragma-json.c | 485 ---------------------- clang/test/AST/ast-print-fp-pragmas.c | 69 --- 23 files changed, 33 insertions(+), 805 deletions(-) delete mode 100644 clang/test/AST/ast-dump-pragma-json.c delete mode 100644 clang/test/AST/ast-print-fp-pragmas.c diff --git a/clang/include/clang/AST/JSONNodeDumper.h b/clang/include/clang/AST/JSONNodeDumper.h index ed49e0007a18..5638df42a1c5 100644 --- a/clang/include/clang/AST/JSONNodeDumper.h +++ b/clang/include/clang/AST/JSONNodeDumper.h @@ -160,7 +160,6 @@ class JSONNodeDumper std::string createPointerRepresentation(const void *Ptr); llvm::json::Object createQualType(QualType QT, bool Desugar = true); llvm::json::Object createBareDeclRef(const Decl *D); - llvm::json::Object createFPOptions(FPOptionsOverride FPO); void writeBareDeclRef(const Decl *D); llvm::json::Object createCXXRecordDefinitionData(const CXXRecordDecl *RD); llvm::json::Object createCXXBaseSpecifier(const CXXBaseSpecifier &BS); @@ -318,7 +317,6 @@ public: void VisitGotoStmt(const GotoStmt *GS); void VisitWhileStmt(const WhileStmt *WS); void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *OACS); - void VisitCompoundStmt(const CompoundStmt *IS); void VisitNullTemplateArgument(const TemplateArgument &TA); void VisitTypeTemplateArgument(const TemplateArgument &TA); diff --git a/clang/include/clang/AST/Stmt.h b/clang/include/clang/AST/Stmt.h index 49a66a1ea5b8..653ce4b4b90c 100644 --- a/clang/include/clang/AST/Stmt.h +++ b/clang/include/clang/AST/Stmt.h @@ -19,7 +19,6 @@ #include "clang/Basic/CapturedStmt.h" #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/LLVM.h" -#include "clang/Basic/LangOptions.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/Specifiers.h" #include "llvm/ADT/ArrayRef.h" @@ -129,10 +128,6 @@ protected: unsigned : NumStmtBits; - /// True if the compound statement has one or more pragmas that set some - /// floating-point features. - unsigned HasFPFeatures : 1; - unsigned NumStmts; }; @@ -1403,9 +1398,8 @@ public: }; /// CompoundStmt - This represents a group of statements like { stmt stmt }. -class CompoundStmt final - : public Stmt, - private llvm::TrailingObjects { +class CompoundStmt final : public Stmt, + private llvm::TrailingObjects { friend class ASTStmtReader; friend TrailingObjects; @@ -1415,49 +1409,27 @@ class CompoundStmt final /// The location of the closing "}". SourceLocation RBraceLoc; - CompoundStmt(ArrayRef Stmts, FPOptionsOverride FPFeatures, - SourceLocation LB, SourceLocation RB); + CompoundStmt(ArrayRef Stmts, SourceLocation LB, SourceLocation RB); explicit CompoundStmt(EmptyShell Empty) : Stmt(CompoundStmtClass, Empty) {} void setStmts(ArrayRef Stmts); - /// Set FPOptionsOverride in trailing storage. Used only by Serialization. - void setStoredFPFeatures(FPOptionsOverride F) { - assert(hasStoredFPFeatures()); - *getTrailingObjects() = F; - } - - size_t numTrailingObjects(OverloadToken) const { - return CompoundStmtBits.NumStmts; - } - public: static CompoundStmt *Create(const ASTContext &C, ArrayRef Stmts, - FPOptionsOverride FPFeatures, SourceLocation LB, - SourceLocation RB); + SourceLocation LB, SourceLocation RB); // Build an empty compound statement with a location. explicit CompoundStmt(SourceLocation Loc) : Stmt(CompoundStmtClass), LBraceLoc(Loc), RBraceLoc(Loc) { CompoundStmtBits.NumStmts = 0; - CompoundStmtBits.HasFPFeatures = 0; } // Build an empty compound statement. - static CompoundStmt *CreateEmpty(const ASTContext &C, unsigned NumStmts, - bool HasFPFeatures); + static CompoundStmt *CreateEmpty(const ASTContext &C, unsigned NumStmts); bool body_empty() const { return CompoundStmtBits.NumStmts == 0; } unsigned size() const { return CompoundStmtBits.NumStmts; } - bool hasStoredFPFeatures() const { return CompoundStmtBits.HasFPFeatures; } - - /// Get FPOptionsOverride from trailing storage. - FPOptionsOverride getStoredFPFeatures() const { - assert(hasStoredFPFeatures()); - return *getTrailingObjects(); - } - using body_iterator = Stmt **; using body_range = llvm::iterator_range; diff --git a/clang/include/clang/AST/TextNodeDumper.h b/clang/include/clang/AST/TextNodeDumper.h index 2e4bcdd27a8a..0ecb8a23dfb3 100644 --- a/clang/include/clang/AST/TextNodeDumper.h +++ b/clang/include/clang/AST/TextNodeDumper.h @@ -246,7 +246,6 @@ public: void VisitLabelStmt(const LabelStmt *Node); void VisitGotoStmt(const GotoStmt *Node); void VisitCaseStmt(const CaseStmt *Node); - void VisitCompoundStmt(const CompoundStmt *Node); void VisitConstantExpr(const ConstantExpr *Node); void VisitCallExpr(const CallExpr *Node); void VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *Node); diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index 3a1c13dd7256..78335dabfc88 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -653,8 +653,6 @@ public: private: storage_type Value; - FPOptionsOverride getChangesSlow(const FPOptions &Base) const; - public: FPOptions() : Value(0) { setFPContractMode(LangOptions::FPM_Off); @@ -745,9 +743,6 @@ public: return Opts; } - /// Return difference with the given option set. - FPOptionsOverride getChangesFrom(const FPOptions &Base) const; - // We can define most of the accessors automatically: #define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \ TYPE get##NAME() const { \ @@ -796,8 +791,6 @@ public: : Options(LO), OverrideMask(OverrideMaskBits) {} FPOptionsOverride(FPOptions FPO) : Options(FPO), OverrideMask(OverrideMaskBits) {} - FPOptionsOverride(FPOptions FPO, FPOptions::storage_type Mask) - : Options(FPO), OverrideMask(Mask) {} bool requiresTrailingStorage() const { return OverrideMask != 0; } @@ -878,12 +871,6 @@ public: LLVM_DUMP_METHOD void dump(); }; -inline FPOptionsOverride FPOptions::getChangesFrom(const FPOptions &Base) const { - if (Value == Base.Value) - return FPOptionsOverride(); - return getChangesSlow(Base); -} - /// Describes the kind of translation unit being processed. enum TranslationUnitKind { /// The translation unit is a complete translation unit. diff --git a/clang/include/clang/Sema/ScopeInfo.h b/clang/include/clang/Sema/ScopeInfo.h index 18848c8d8a45..08bf53d22f8a 100644 --- a/clang/include/clang/Sema/ScopeInfo.h +++ b/clang/include/clang/Sema/ScopeInfo.h @@ -74,12 +74,7 @@ public: /// expression. bool IsStmtExpr; - /// FP options at the beginning of the compound statement, prior to - /// any pragma. - FPOptions InitialFPFeatures; - - CompoundScopeInfo(bool IsStmtExpr, FPOptions FPO) - : IsStmtExpr(IsStmtExpr), InitialFPFeatures(FPO) {} + CompoundScopeInfo(bool IsStmtExpr) : IsStmtExpr(IsStmtExpr) {} void setHasEmptyLoopBodies() { HasEmptyLoopBodies = true; diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index e9730112eaa3..8d930ead97d3 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -6339,10 +6339,9 @@ ExpectedStmt ASTNodeImporter::VisitCompoundStmt(CompoundStmt *S) { if (!ToRBracLocOrErr) return ToRBracLocOrErr.takeError(); - FPOptionsOverride FPO = - S->hasStoredFPFeatures() ? S->getStoredFPFeatures() : FPOptionsOverride(); - return CompoundStmt::Create(Importer.getToContext(), ToStmts, FPO, - *ToLBracLocOrErr, *ToRBracLocOrErr); + return CompoundStmt::Create( + Importer.getToContext(), ToStmts, + *ToLBracLocOrErr, *ToRBracLocOrErr); } ExpectedStmt ASTNodeImporter::VisitCaseStmt(CaseStmt *S) { diff --git a/clang/lib/AST/JSONNodeDumper.cpp b/clang/lib/AST/JSONNodeDumper.cpp index 87e4255c2b93..ae585def4d07 100644 --- a/clang/lib/AST/JSONNodeDumper.cpp +++ b/clang/lib/AST/JSONNodeDumper.cpp @@ -1692,18 +1692,3 @@ void JSONNodeDumper::visitVerbatimLineComment( const comments::VerbatimLineComment *C, const comments::FullComment *) { JOS.attribute("text", C->getText()); } - -llvm::json::Object JSONNodeDumper::createFPOptions(FPOptionsOverride FPO) { - llvm::json::Object Ret; -#define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \ - if (FPO.has##NAME##Override()) \ - Ret.try_emplace(#NAME, static_cast(FPO.get##NAME##Override())); -#include "clang/Basic/FPOptions.def" - return Ret; -} - -void JSONNodeDumper::VisitCompoundStmt(const CompoundStmt *S) { - VisitStmt(S); - if (S->hasStoredFPFeatures()) - JOS.attribute("fpoptions", createFPOptions(S->getStoredFPFeatures())); -} diff --git a/clang/lib/AST/Stmt.cpp b/clang/lib/AST/Stmt.cpp index 8eae04d0d9fd..d562717bf6b2 100644 --- a/clang/lib/AST/Stmt.cpp +++ b/clang/lib/AST/Stmt.cpp @@ -361,14 +361,11 @@ int64_t Stmt::getID(const ASTContext &Context) const { return Context.getAllocator().identifyKnownAlignedObject(this); } -CompoundStmt::CompoundStmt(ArrayRef Stmts, FPOptionsOverride FPFeatures, - SourceLocation LB, SourceLocation RB) +CompoundStmt::CompoundStmt(ArrayRef Stmts, SourceLocation LB, + SourceLocation RB) : Stmt(CompoundStmtClass), LBraceLoc(LB), RBraceLoc(RB) { CompoundStmtBits.NumStmts = Stmts.size(); - CompoundStmtBits.HasFPFeatures = FPFeatures.requiresTrailingStorage(); setStmts(Stmts); - if (hasStoredFPFeatures()) - setStoredFPFeatures(FPFeatures); } void CompoundStmt::setStmts(ArrayRef Stmts) { @@ -379,23 +376,18 @@ void CompoundStmt::setStmts(ArrayRef Stmts) { } CompoundStmt *CompoundStmt::Create(const ASTContext &C, ArrayRef Stmts, - FPOptionsOverride FPFeatures, SourceLocation LB, SourceLocation RB) { void *Mem = - C.Allocate(totalSizeToAlloc( - Stmts.size(), FPFeatures.requiresTrailingStorage()), - alignof(CompoundStmt)); - return new (Mem) CompoundStmt(Stmts, FPFeatures, LB, RB); + C.Allocate(totalSizeToAlloc(Stmts.size()), alignof(CompoundStmt)); + return new (Mem) CompoundStmt(Stmts, LB, RB); } -CompoundStmt *CompoundStmt::CreateEmpty(const ASTContext &C, unsigned NumStmts, - bool HasFPFeatures) { - void *Mem = C.Allocate( - totalSizeToAlloc(NumStmts, HasFPFeatures), - alignof(CompoundStmt)); +CompoundStmt *CompoundStmt::CreateEmpty(const ASTContext &C, + unsigned NumStmts) { + void *Mem = + C.Allocate(totalSizeToAlloc(NumStmts), alignof(CompoundStmt)); CompoundStmt *New = new (Mem) CompoundStmt(EmptyShell()); New->CompoundStmtBits.NumStmts = NumStmts; - New->CompoundStmtBits.HasFPFeatures = HasFPFeatures; return New; } diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 983fd39874f0..61a1513b6a36 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -128,7 +128,6 @@ namespace { void PrintRawSEHFinallyStmt(SEHFinallyStmt *S); void PrintOMPExecutableDirective(OMPExecutableDirective *S, bool ForceNoStmt = false); - void PrintFPPragmas(CompoundStmt *S); void PrintExpr(Expr *E) { if (E) @@ -175,73 +174,12 @@ namespace { /// with no newline after the }. void StmtPrinter::PrintRawCompoundStmt(CompoundStmt *Node) { OS << "{" << NL; - PrintFPPragmas(Node); for (auto *I : Node->body()) PrintStmt(I); Indent() << "}"; } -void StmtPrinter::PrintFPPragmas(CompoundStmt *S) { - if (!S->hasStoredFPFeatures()) - return; - FPOptionsOverride FPO = S->getStoredFPFeatures(); - bool FEnvAccess = false; - if (FPO.hasAllowFEnvAccessOverride()) { - FEnvAccess = FPO.getAllowFEnvAccessOverride(); - Indent() << "#pragma STDC FENV_ACCESS " << (FEnvAccess ? "ON" : "OFF") - << NL; - } - if (FPO.hasSpecifiedExceptionModeOverride()) { - LangOptions::FPExceptionModeKind EM = - FPO.getSpecifiedExceptionModeOverride(); - if (!FEnvAccess || EM != LangOptions::FPE_Strict) { - Indent() << "#pragma clang fp exceptions("; - switch (FPO.getSpecifiedExceptionModeOverride()) { - default: - break; - case LangOptions::FPE_Ignore: - OS << "ignore"; - break; - case LangOptions::FPE_MayTrap: - OS << "maytrap"; - break; - case LangOptions::FPE_Strict: - OS << "strict"; - break; - } - OS << ")\n"; - } - } - if (FPO.hasConstRoundingModeOverride()) { - LangOptions::RoundingMode RM = FPO.getConstRoundingModeOverride(); - Indent() << "#pragma STDC FENV_ROUND "; - switch (RM) { - case llvm::RoundingMode::TowardZero: - OS << "FE_TOWARDZERO"; - break; - case llvm::RoundingMode::NearestTiesToEven: - OS << "FE_TONEAREST"; - break; - case llvm::RoundingMode::TowardPositive: - OS << "FE_DOWNWARD"; - break; - case llvm::RoundingMode::TowardNegative: - OS << "FE_UPWARD"; - break; - case llvm::RoundingMode::NearestTiesToAway: - OS << "FE_TONEARESTFROMZERO"; - break; - case llvm::RoundingMode::Dynamic: - OS << "FE_DYNAMIC"; - break; - default: - llvm_unreachable("Invalid rounding mode"); - } - OS << NL; - } -} - void StmtPrinter::PrintRawDecl(Decl *D) { D->print(OS, Policy, IndentLevel); } diff --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp index 79e9fa6ab86f..7c48fd2d6d0d 100644 --- a/clang/lib/AST/TextNodeDumper.cpp +++ b/clang/lib/AST/TextNodeDumper.cpp @@ -2371,9 +2371,3 @@ void TextNodeDumper::VisitBlockDecl(const BlockDecl *D) { void TextNodeDumper::VisitConceptDecl(const ConceptDecl *D) { dumpName(D); } - -void TextNodeDumper::VisitCompoundStmt(const CompoundStmt *S) { - VisitStmt(S); - if (S->hasStoredFPFeatures()) - printFPOptions(S->getStoredFPFeatures()); -} diff --git a/clang/lib/Analysis/BodyFarm.cpp b/clang/lib/Analysis/BodyFarm.cpp index 23d37b881069..8de69275a452 100644 --- a/clang/lib/Analysis/BodyFarm.cpp +++ b/clang/lib/Analysis/BodyFarm.cpp @@ -134,8 +134,7 @@ BinaryOperator *ASTMaker::makeComparison(const Expr *LHS, const Expr *RHS, } CompoundStmt *ASTMaker::makeCompound(ArrayRef Stmts) { - return CompoundStmt::Create(C, Stmts, FPOptionsOverride(), SourceLocation(), - SourceLocation()); + return CompoundStmt::Create(C, Stmts, SourceLocation(), SourceLocation()); } DeclRefExpr *ASTMaker::makeDeclRefExpr( diff --git a/clang/lib/Basic/LangOptions.cpp b/clang/lib/Basic/LangOptions.cpp index 753b6bfe18a3..0bf410c053ed 100644 --- a/clang/lib/Basic/LangOptions.cpp +++ b/clang/lib/Basic/LangOptions.cpp @@ -204,15 +204,6 @@ FPOptions FPOptions::defaultWithoutTrailingStorage(const LangOptions &LO) { return result; } -FPOptionsOverride FPOptions::getChangesSlow(const FPOptions &Base) const { - FPOptions::storage_type OverrideMask = 0; -#define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \ - if (get##NAME() != Base.get##NAME()) \ - OverrideMask |= NAME##Mask; -#include "clang/Basic/FPOptions.def" - return FPOptionsOverride(*this, OverrideMask); -} - LLVM_DUMP_METHOD void FPOptions::dump() { #define OPTION(NAME, TYPE, WIDTH, PREVIOUS) \ llvm::errs() << "\n " #NAME " " << get##NAME(); diff --git a/clang/lib/CodeGen/CGCoroutine.cpp b/clang/lib/CodeGen/CGCoroutine.cpp index 594c7d49df3c..4216ca1e2f01 100644 --- a/clang/lib/CodeGen/CGCoroutine.cpp +++ b/clang/lib/CodeGen/CGCoroutine.cpp @@ -238,8 +238,8 @@ static LValueOrRValue emitSuspendExpression(CodeGenFunction &CGF, CGCoroData &Co auto Loc = S.getResumeExpr()->getExprLoc(); auto *Catch = new (CGF.getContext()) CXXCatchStmt(Loc, /*exDecl=*/nullptr, Coro.ExceptionHandler); - auto *TryBody = CompoundStmt::Create(CGF.getContext(), S.getResumeExpr(), - FPOptionsOverride(), Loc, Loc); + auto *TryBody = + CompoundStmt::Create(CGF.getContext(), S.getResumeExpr(), Loc, Loc); TryStmt = CXXTryStmt::Create(CGF.getContext(), Loc, TryBody, Catch); CGF.EnterCXXTryStmt(*TryStmt); } diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 326010d4d93f..e2ec8eec60c3 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -2219,8 +2219,7 @@ operator()(sema::FunctionScopeInfo *Scope) const { } void Sema::PushCompoundScope(bool IsStmtExpr) { - getCurFunction()->CompoundScopes.push_back( - CompoundScopeInfo(IsStmtExpr, getCurFPFeatures())); + getCurFunction()->CompoundScopes.push_back(CompoundScopeInfo(IsStmtExpr)); } void Sema::PopCompoundScope() { diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 221cbd14da97..a70c8579c654 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -15353,8 +15353,8 @@ void Sema::DefineImplicitLambdaToFunctionPointerConversion( VK_LValue, Conv->getLocation()); assert(FunctionRef && "Can't refer to __invoke function?"); Stmt *Return = BuildReturnStmt(Conv->getLocation(), FunctionRef).get(); - Conv->setBody(CompoundStmt::Create(Context, Return, FPOptionsOverride(), - Conv->getLocation(), Conv->getLocation())); + Conv->setBody(CompoundStmt::Create(Context, Return, Conv->getLocation(), + Conv->getLocation())); Conv->markUsed(Context); Conv->setReferenced(); @@ -15408,8 +15408,8 @@ void Sema::DefineImplicitLambdaToBlockPointerConversion( // Set the body of the conversion function. Stmt *ReturnS = Return.get(); - Conv->setBody(CompoundStmt::Create(Context, ReturnS, FPOptionsOverride(), - Conv->getLocation(), Conv->getLocation())); + Conv->setBody(CompoundStmt::Create(Context, ReturnS, Conv->getLocation(), + Conv->getLocation())); Conv->markUsed(Context); // We're done; notify the mutation listener, if any. diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 0d73fcf8bf4e..fadcdc4c6b94 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -7295,9 +7295,8 @@ Stmt *Sema::MaybeCreateStmtWithCleanups(Stmt *SubStmt) { // a StmtExpr; currently this is only used for asm statements. // This is hacky, either create a new CXXStmtWithTemporaries statement or // a new AsmStmtWithTemporaries. - CompoundStmt *CompStmt = - CompoundStmt::Create(Context, SubStmt, FPOptionsOverride(), - SourceLocation(), SourceLocation()); + CompoundStmt *CompStmt = CompoundStmt::Create( + Context, SubStmt, SourceLocation(), SourceLocation()); Expr *E = new (Context) StmtExpr(CompStmt, Context.VoidTy, SourceLocation(), SourceLocation(), /*FIXME TemplateDepth=*/0); diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index e4e9858c164b..262f1ababadd 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -14454,8 +14454,8 @@ StmtResult Sema::ActOnOpenMPTileDirective(ArrayRef Clauses, SmallVector BodyParts; BodyParts.append(LoopHelper.Updates.begin(), LoopHelper.Updates.end()); BodyParts.push_back(Inner); - Inner = CompoundStmt::Create(Context, BodyParts, FPOptionsOverride(), - Inner->getBeginLoc(), Inner->getEndLoc()); + Inner = CompoundStmt::Create(Context, BodyParts, Inner->getBeginLoc(), + Inner->getEndLoc()); Inner = new (Context) ForStmt(Context, InitStmt.get(), CondExpr.get(), nullptr, IncrStmt.get(), Inner, LoopHelper.Init->getBeginLoc(), @@ -14729,9 +14729,8 @@ StmtResult Sema::ActOnOpenMPUnrollDirective(ArrayRef Clauses, SmallVector InnerBodyStmts; InnerBodyStmts.append(LoopHelper.Updates.begin(), LoopHelper.Updates.end()); InnerBodyStmts.push_back(Body); - CompoundStmt *InnerBody = - CompoundStmt::Create(Context, InnerBodyStmts, FPOptionsOverride(), - Body->getBeginLoc(), Body->getEndLoc()); + CompoundStmt *InnerBody = CompoundStmt::Create( + Context, InnerBodyStmts, Body->getBeginLoc(), Body->getEndLoc()); ForStmt *InnerFor = new (Context) ForStmt(Context, InnerInit.get(), InnerCond.get(), nullptr, InnerIncr.get(), InnerBody, LoopHelper.Init->getBeginLoc(), diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index f25694ce48c9..82831a448869 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -442,16 +442,7 @@ StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, DiagnoseEmptyLoopBody(Elts[i], Elts[i + 1]); } - // Calculate difference between FP options in this compound statement and in - // the enclosing one. If this is a function body, take the difference against - // default options. In this case the difference will indicate options that are - // changed upon entry to the statement. - FPOptions FPO = (getCurFunction()->CompoundScopes.size() == 1) - ? FPOptions(getLangOpts()) - : getCurCompoundScope().InitialFPFeatures; - FPOptionsOverride FPDiff = getCurFPFeatures().getChangesFrom(FPO); - - return CompoundStmt::Create(Context, Elts, FPDiff, L, R); + return CompoundStmt::Create(Context, Elts, L, R); } ExprResult diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index 592b5ebaf2a2..7cd1d3495963 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -152,14 +152,9 @@ void ASTStmtReader::VisitCompoundStmt(CompoundStmt *S) { VisitStmt(S); SmallVector Stmts; unsigned NumStmts = Record.readInt(); - unsigned HasFPFeatures = Record.readInt(); - assert(S->hasStoredFPFeatures() == HasFPFeatures); while (NumStmts--) Stmts.push_back(Record.readSubStmt()); S->setStmts(Stmts); - if (HasFPFeatures) - S->setStoredFPFeatures( - FPOptionsOverride::getFromOpaqueInt(Record.readInt())); S->LBraceLoc = readSourceLocation(); S->RBraceLoc = readSourceLocation(); } @@ -2768,8 +2763,7 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) { case STMT_COMPOUND: S = CompoundStmt::CreateEmpty( - Context, /*NumStmts=*/Record[ASTStmtReader::NumStmtFields], - /*HasFPFeatures=*/Record[ASTStmtReader::NumStmtFields + 1]); + Context, /*NumStmts=*/Record[ASTStmtReader::NumStmtFields]); break; case STMT_CASE: diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp index 725255cdd2ff..155fe81dd70b 100644 --- a/clang/lib/Serialization/ASTWriterStmt.cpp +++ b/clang/lib/Serialization/ASTWriterStmt.cpp @@ -81,11 +81,8 @@ void ASTStmtWriter::VisitNullStmt(NullStmt *S) { void ASTStmtWriter::VisitCompoundStmt(CompoundStmt *S) { VisitStmt(S); Record.push_back(S->size()); - Record.push_back(S->hasStoredFPFeatures()); for (auto *CS : S->body()) Record.AddStmt(CS); - if (S->hasStoredFPFeatures()) - Record.push_back(S->getStoredFPFeatures().getAsOpaqueInt()); Record.AddSourceLocation(S->getLBracLoc()); Record.AddSourceLocation(S->getRBracLoc()); Code = serialization::STMT_COMPOUND; diff --git a/clang/test/AST/ast-dump-fpfeatures.cpp b/clang/test/AST/ast-dump-fpfeatures.cpp index da0011602a72..8d69b376d970 100644 --- a/clang/test/AST/ast-dump-fpfeatures.cpp +++ b/clang/test/AST/ast-dump-fpfeatures.cpp @@ -141,49 +141,3 @@ float func_15(float x, float y) { // CHECK: CompoundStmt // CHECK-NEXT: ReturnStmt // CHECK-NEXT: BinaryOperator {{.*}} 'float' '+' ConstRoundingMode=towardzero - -float func_16(float x, float y) { -#pragma STDC FENV_ROUND FE_TOWARDZERO - if (x < 0) { -#pragma STDC FENV_ROUND FE_UPWARD - return x - y; - } - return x + y; -} - -// CHECK-LABEL: FunctionDecl {{.*}} func_16 'float (float, float)' -// CHECK: CompoundStmt {{.*}} ConstRoundingMode=towardzero -// CHECK: IfStmt -// CHECK: CompoundStmt {{.*}} ConstRoundingMode=upward -// CHECK: ReturnStmt -// CHECK: BinaryOperator {{.*}} ConstRoundingMode=upward -// CHECK: ReturnStmt -// CHECK: BinaryOperator {{.*}} ConstRoundingMode=towardzero - -float func_17(float x, float y) { -#pragma STDC FENV_ROUND FE_TOWARDZERO - if (x < 0) { -#pragma STDC FENV_ROUND FE_TOWARDZERO - return x - y; - } - return x + y; -} - -// CHECK-LABEL: FunctionDecl {{.*}} func_17 'float (float, float)' -// CHECK: CompoundStmt {{.*}} ConstRoundingMode=towardzero -// CHECK: IfStmt -// CHECK: CompoundStmt {{.*}} -// CHECK: ReturnStmt -// CHECK: BinaryOperator {{.*}} ConstRoundingMode=towardzero -// CHECK: ReturnStmt -// CHECK: BinaryOperator {{.*}} ConstRoundingMode=towardzero - -#pragma STDC FENV_ROUND FE_DOWNWARD -float func_18(float x, float y) { - return x + y; -} - -// CHECK-LABEL: FunctionDecl {{.*}} func_18 'float (float, float)' -// CHECK: CompoundStmt {{.*}} ConstRoundingMode=downward -// CHECK: ReturnStmt -// CHECK: BinaryOperator {{.*}} ConstRoundingMode=downward diff --git a/clang/test/AST/ast-dump-pragma-json.c b/clang/test/AST/ast-dump-pragma-json.c deleted file mode 100644 index c2ab154e6402..000000000000 --- a/clang/test/AST/ast-dump-pragma-json.c +++ /dev/null @@ -1,485 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump=json %s | FileCheck %s - -float func_16(float x, float y) { - #pragma STDC FENV_ROUND FE_TOWARDZERO - if (x < 0) { - #pragma STDC FENV_ROUND FE_UPWARD - return x - y; - } - return x + y; -} - -// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py -// using --filters=CompoundStmt - - -// CHECK-NOT: {{^}}Dumping -// CHECK: "kind": "CompoundStmt", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 116, -// CHECK-NEXT: "col": 33, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 249, -// CHECK-NEXT: "line": 10, -// CHECK-NEXT: "col": 1, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "fpoptions": { -// CHECK-NEXT: "ConstRoundingMode": 0 -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "IfStmt", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 160, -// CHECK-NEXT: "line": 5, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 2 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 231, -// CHECK-NEXT: "line": 8, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "BinaryOperator", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 164, -// CHECK-NEXT: "line": 5, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "col": 11, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "int" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "opcode": "<", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ImplicitCastExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 164, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 164, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "castKind": "LValueToRValue", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "DeclRefExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 164, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 164, -// CHECK-NEXT: "col": 7, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "lvalue", -// CHECK-NEXT: "referencedDecl": { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ParmVarDecl", -// CHECK-NEXT: "name": "x", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ImplicitCastExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "col": 11, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "col": 11, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "castKind": "IntegralToFloating", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "IntegerLiteral", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "col": 11, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 168, -// CHECK-NEXT: "col": 11, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "int" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "value": "0" -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "CompoundStmt", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 171, -// CHECK-NEXT: "col": 14, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 231, -// CHECK-NEXT: "line": 8, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "fpoptions": { -// CHECK-NEXT: "ConstRoundingMode": 2 -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ReturnStmt", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 215, -// CHECK-NEXT: "line": 7, -// CHECK-NEXT: "col": 5, -// CHECK-NEXT: "tokLen": 6 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 226, -// CHECK-NEXT: "col": 16, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "BinaryOperator", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 222, -// CHECK-NEXT: "col": 12, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 226, -// CHECK-NEXT: "col": 16, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "opcode": "-", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ImplicitCastExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 222, -// CHECK-NEXT: "col": 12, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 222, -// CHECK-NEXT: "col": 12, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "castKind": "LValueToRValue", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "DeclRefExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 222, -// CHECK-NEXT: "col": 12, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 222, -// CHECK-NEXT: "col": 12, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "lvalue", -// CHECK-NEXT: "referencedDecl": { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ParmVarDecl", -// CHECK-NEXT: "name": "x", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ImplicitCastExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 226, -// CHECK-NEXT: "col": 16, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 226, -// CHECK-NEXT: "col": 16, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "castKind": "LValueToRValue", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "DeclRefExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 226, -// CHECK-NEXT: "col": 16, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 226, -// CHECK-NEXT: "col": 16, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "lvalue", -// CHECK-NEXT: "referencedDecl": { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ParmVarDecl", -// CHECK-NEXT: "name": "y", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ReturnStmt", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 235, -// CHECK-NEXT: "line": 9, -// CHECK-NEXT: "col": 3, -// CHECK-NEXT: "tokLen": 6 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 246, -// CHECK-NEXT: "col": 14, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "BinaryOperator", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 242, -// CHECK-NEXT: "col": 10, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 246, -// CHECK-NEXT: "col": 14, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "opcode": "+", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ImplicitCastExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 242, -// CHECK-NEXT: "col": 10, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 242, -// CHECK-NEXT: "col": 10, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "castKind": "LValueToRValue", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "DeclRefExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 242, -// CHECK-NEXT: "col": 10, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 242, -// CHECK-NEXT: "col": 10, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "lvalue", -// CHECK-NEXT: "referencedDecl": { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ParmVarDecl", -// CHECK-NEXT: "name": "x", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ImplicitCastExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 246, -// CHECK-NEXT: "col": 14, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 246, -// CHECK-NEXT: "col": 14, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "prvalue", -// CHECK-NEXT: "castKind": "LValueToRValue", -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "DeclRefExpr", -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": { -// CHECK-NEXT: "offset": 246, -// CHECK-NEXT: "col": 14, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: }, -// CHECK-NEXT: "end": { -// CHECK-NEXT: "offset": 246, -// CHECK-NEXT: "col": 14, -// CHECK-NEXT: "tokLen": 1 -// CHECK-NEXT: } -// CHECK-NEXT: }, -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: }, -// CHECK-NEXT: "valueCategory": "lvalue", -// CHECK-NEXT: "referencedDecl": { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "ParmVarDecl", -// CHECK-NEXT: "name": "y", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "float" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: } diff --git a/clang/test/AST/ast-print-fp-pragmas.c b/clang/test/AST/ast-print-fp-pragmas.c deleted file mode 100644 index 6d64b6af8c62..000000000000 --- a/clang/test/AST/ast-print-fp-pragmas.c +++ /dev/null @@ -1,69 +0,0 @@ -// RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s - -float func_1(float x, float y) { -#pragma STDC FENV_ACCESS ON - if (x != 0) { - return y; - } - return x + y; -} - -// CHECK-LABEL: float func_1(float x, float y) { -// CHECK-NEXT: #pragma STDC FENV_ACCESS ON -// CHECK-NEXT: if (x != 0) { -// CHECK-NEXT: return y; -// CHECK-NEXT: } -// CHECK-NEXT: return x + y; -// CHECK-NEXT: } - -float func_2(float x, float y) { -#pragma STDC FENV_ACCESS ON - if (x != 0) { - #pragma STDC FENV_ACCESS OFF - return y; - } - return x + y; -} - -// CHECK-LABEL: float func_2(float x, float y) { -// CHECK-NEXT: #pragma STDC FENV_ACCESS ON -// CHECK-NEXT: if (x != 0) { -// CHECK-NEXT: #pragma STDC FENV_ACCESS OFF -// CHECK-NEXT: return y; -// CHECK-NEXT: } -// CHECK-NEXT: return x + y; -// CHECK-NEXT: } - -float func_3(float x, float y) { -#pragma STDC FENV_ROUND FE_DOWNWARD - return x + y; -} - -// CHECK-LABEL: float func_3(float x, float y) { -// CHECK-NEXT: #pragma STDC FENV_ROUND FE_UPWARD -// CHECK-NEXT: return x + y; -// CHECK-NEXT: } - -float func_4(float x, float y, float z) { -#pragma STDC FENV_ACCESS ON -#pragma clang fp exceptions(maytrap) -#pragma STDC FENV_ROUND FE_UPWARD - if (z != 0) { - #pragma STDC FENV_ACCESS OFF - #pragma STDC FENV_ROUND FE_TOWARDZERO - return z + x; - } - return x + y; -} - -// CHECK-LABEL: float func_4(float x, float y, float z) { -// CHECK-NEXT: #pragma STDC FENV_ACCESS ON -// CHECK-NEXT: #pragma clang fp exceptions(maytrap) -// CHECK-NEXT: #pragma STDC FENV_ROUND FE_DOWNWARD -// CHECK-NEXT: if (z != 0) { -// CHECK-NEXT: #pragma STDC FENV_ACCESS OFF -// CHECK-NEXT: #pragma STDC FENV_ROUND FE_TOWARDZERO -// CHECK-NEXT: return z + x; -// CHECK-NEXT: } -// CHECK-NEXT: return x + y; -// CHECK-NEXT: }