Changeset View
Changeset View
Standalone View
Standalone View
clang/lib/Sema/SemaAttr.cpp
Show First 20 Lines • Show All 975 Lines • ▼ Show 20 Lines | void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) { | ||||
NewFPFeatures.setAllowFPReassociateOverride(IsEnabled); | NewFPFeatures.setAllowFPReassociateOverride(IsEnabled); | ||||
FpPragmaStack.Act(Loc, PSK_Set, StringRef(), NewFPFeatures); | FpPragmaStack.Act(Loc, PSK_Set, StringRef(), NewFPFeatures); | ||||
CurFPFeatures = NewFPFeatures.applyOverrides(getLangOpts()); | CurFPFeatures = NewFPFeatures.applyOverrides(getLangOpts()); | ||||
} | } | ||||
void Sema::setRoundingMode(SourceLocation Loc, llvm::RoundingMode FPR) { | void Sema::setRoundingMode(SourceLocation Loc, llvm::RoundingMode FPR) { | ||||
// C2x: 7.6.2p3 If the FE_DYNAMIC mode is specified and FENV_ACCESS is "off", | // C2x: 7.6.2p3 If the FE_DYNAMIC mode is specified and FENV_ACCESS is "off", | ||||
// the translator may assume that the default rounding mode is in effect. | // the translator may assume that the default rounding mode is in effect. | ||||
if (FPR == llvm::RoundingMode::Dynamic && !CurFPFeatures.getAllowFEnvAccess()) | if (FPR == llvm::RoundingMode::Dynamic && | ||||
!CurFPFeatures.getAllowFEnvAccess() && | |||||
CurFPFeatures.getFPExceptionMode() == LangOptions::FPE_Ignore) | |||||
FPR = llvm::RoundingMode::NearestTiesToEven; | FPR = llvm::RoundingMode::NearestTiesToEven; | ||||
FPOptionsOverride NewFPFeatures = CurFPFeatureOverrides(); | FPOptionsOverride NewFPFeatures = CurFPFeatureOverrides(); | ||||
NewFPFeatures.setRoundingModeOverride(FPR); | NewFPFeatures.setRoundingModeOverride(FPR); | ||||
FpPragmaStack.Act(Loc, PSK_Set, StringRef(), NewFPFeatures); | FpPragmaStack.Act(Loc, PSK_Set, StringRef(), NewFPFeatures); | ||||
CurFPFeatures = NewFPFeatures.applyOverrides(getLangOpts()); | CurFPFeatures = NewFPFeatures.applyOverrides(getLangOpts()); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 65 Lines • Show Last 20 Lines |