diff options
author | Roman Lebedev <lebedev.ri@gmail.com> | 2018-07-27 07:27:14 +0000 |
---|---|---|
committer | Roman Lebedev <lebedev.ri@gmail.com> | 2018-07-27 07:27:14 +0000 |
commit | 12216f1d4a0852accfd22cb6c313a90ecbc19c29 (patch) | |
tree | c9c33999aea49d46d1af6682916bd5fa739f15e4 /clang/lib/Sema/SemaCast.cpp | |
parent | eeab694cea440fde55e11cdb07a84cdecf561c52 (diff) | |
download | bcm5719-llvm-12216f1d4a0852accfd22cb6c313a90ecbc19c29.tar.gz bcm5719-llvm-12216f1d4a0852accfd22cb6c313a90ecbc19c29.zip |
[AST] Sink 'part of explicit cast' down into ImplicitCastExpr
Summary:
As discussed in IRC with @rsmith, it is slightly not good to keep that in the `CastExpr` itself:
Given the explicit cast, which is represented in AST as an `ExplicitCastExpr` + `ImplicitCastExpr`'s,
only the `ImplicitCastExpr`'s will be marked as `PartOfExplicitCast`, but not the `ExplicitCastExpr` itself.
Thus, it is only ever `true` for `ImplicitCastExpr`'s, so we don't need to write/read/dump it for `ExplicitCastExpr`'s.
We don't need to worry that we write the `PartOfExplicitCast` in PCH after `CastExpr::path_iterator`,
since the `ExprImplicitCastAbbrev` is only used when the `NumBaseSpecs == 0`, i.e. there is no 'path'.
Reviewers: rsmith, rjmccall, erichkeane, aaron.ballman
Reviewed By: rsmith, erichkeane
Subscribers: vsk, cfe-commits, rsmith
Tags: #clang
Differential Revision: https://reviews.llvm.org/D49838
llvm-svn: 338108
Diffstat (limited to 'clang/lib/Sema/SemaCast.cpp')
-rw-r--r-- | clang/lib/Sema/SemaCast.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaCast.cpp b/clang/lib/Sema/SemaCast.cpp index a669956422c..b7f4629fbab 100644 --- a/clang/lib/Sema/SemaCast.cpp +++ b/clang/lib/Sema/SemaCast.cpp @@ -93,8 +93,8 @@ namespace { // Walk down from the CE to the OrigSrcExpr, and mark all immediate // ImplicitCastExpr's as being part of ExplicitCastExpr. The original CE // (which is a ExplicitCastExpr), and the OrigSrcExpr are not touched. - while ((CE = dyn_cast<ImplicitCastExpr>(CE->getSubExpr()))) - CE->setIsPartOfExplicitCast(true); + for (; auto *ICE = dyn_cast<ImplicitCastExpr>(CE->getSubExpr()); CE = ICE) + ICE->setIsPartOfExplicitCast(true); } /// Complete an apparently-successful cast operation that yields |