aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorSerge Pavlov <sepavloff@gmail.com>2020-09-12 21:54:14 +0700
committerSerge Pavlov <sepavloff@gmail.com>2020-09-14 12:15:21 +0700
commitf1cd6593da3ad763eb3f7aaf7761d06fb303493a (patch)
treedcfe036e9cb41c3f87f19c2896896a769a648d7e /clang/lib/Sema/SemaInit.cpp
parent88690a965892e82cac05a162a9d10e2ce4e2355f (diff)
downloadllvm-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.cpp34
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