diff options
author | Serge Pavlov <sepavloff@gmail.com> | 2020-09-12 21:54:14 +0700 |
---|---|---|
committer | Serge Pavlov <sepavloff@gmail.com> | 2020-09-14 12:15:21 +0700 |
commit | f1cd6593da3ad763eb3f7aaf7761d06fb303493a (patch) | |
tree | dcfe036e9cb41c3f87f19c2896896a769a648d7e /clang/lib/Sema/SemaInit.cpp | |
parent | 88690a965892e82cac05a162a9d10e2ce4e2355f (diff) | |
download | llvm-f1cd6593da3ad763eb3f7aaf7761d06fb303493a.zip llvm-f1cd6593da3ad763eb3f7aaf7761d06fb303493a.tar.gz llvm-f1cd6593da3ad763eb3f7aaf7761d06fb303493a.tar.bz2 |
[AST][FPEnv] Keep FP options in trailing storage of CastExpr
This is recommit of 6c8041aa0f, reverted in de044f7562 because of some
fails. Original commit message is below.
This change allow a CastExpr to have optional FPOptionsOverride object,
stored in trailing storage. Of all cast nodes only ImplicitCastExpr,
CStyleCastExpr, CXXFunctionalCastExpr and CXXStaticCastExpr are allowed
to have FPOptions.
Differential Revision: https://reviews.llvm.org/D85960
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index f63d600..ab82f85 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -2890,8 +2890,9 @@ InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, Expr *Init = new (Context) IntegerLiteral( Context, CodeUnit, PromotedCharTy, SubExpr->getExprLoc()); if (CharTy != PromotedCharTy) - Init = ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, - Init, nullptr, VK_RValue); + Init = + ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, Init, + nullptr, VK_RValue, FPOptionsOverride()); StructuredList->updateInit(Context, i, Init); } } else { @@ -2912,8 +2913,9 @@ InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, Expr *Init = new (Context) IntegerLiteral( Context, CodeUnit, PromotedCharTy, SubExpr->getExprLoc()); if (CharTy != PromotedCharTy) - Init = ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, - Init, nullptr, VK_RValue); + Init = + ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, Init, + nullptr, VK_RValue, FPOptionsOverride()); StructuredList->updateInit(Context, i, Init); } } @@ -8019,9 +8021,9 @@ ExprResult InitializationSequence::Perform(Sema &S, (Step->Kind == SK_CastDerivedToBaseXValue ? VK_XValue : VK_RValue); - CurInit = - ImplicitCastExpr::Create(S.Context, Step->Type, CK_DerivedToBase, - CurInit.get(), &BasePath, VK); + CurInit = ImplicitCastExpr::Create(S.Context, Step->Type, + CK_DerivedToBase, CurInit.get(), + &BasePath, VK, FPOptionsOverride()); break; } @@ -8150,9 +8152,9 @@ ExprResult InitializationSequence::Perform(Sema &S, if (CreatedObject && checkAbstractType(CurInit.get()->getType())) return ExprError(); - CurInit = ImplicitCastExpr::Create(S.Context, CurInit.get()->getType(), - CastKind, CurInit.get(), nullptr, - CurInit.get()->getValueKind()); + CurInit = ImplicitCastExpr::Create( + S.Context, CurInit.get()->getType(), CastKind, CurInit.get(), nullptr, + CurInit.get()->getValueKind(), S.CurFPFeatureOverrides()); if (shouldBindAsTemporary(Entity)) // The overall entity is temporary, so this expression should be @@ -8493,9 +8495,9 @@ ExprResult InitializationSequence::Perform(Sema &S, break; case SK_ProduceObjCObject: - CurInit = - ImplicitCastExpr::Create(S.Context, Step->Type, CK_ARCProduceObject, - CurInit.get(), nullptr, VK_RValue); + CurInit = ImplicitCastExpr::Create( + S.Context, Step->Type, CK_ARCProduceObject, CurInit.get(), nullptr, + VK_RValue, FPOptionsOverride()); break; case SK_StdInitializerList: { @@ -8549,9 +8551,9 @@ ExprResult InitializationSequence::Perform(Sema &S, // Case 1b and 1c // No cast from integer to sampler is needed. if (!Var->hasGlobalStorage()) { - CurInit = ImplicitCastExpr::Create(S.Context, Step->Type, - CK_LValueToRValue, Init, - /*BasePath=*/nullptr, VK_RValue); + CurInit = ImplicitCastExpr::Create( + S.Context, Step->Type, CK_LValueToRValue, Init, + /*BasePath=*/nullptr, VK_RValue, FPOptionsOverride()); break; } // Case 1a |