[PATCH] D48958: [clang][ubsan] Implicit Cast Sanitizer - integer truncation - clang part
Vedant Kumar via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 12 10:28:01 PDT 2018
vsk added a comment.
I have some minor comments but overall I think this is in good shape. It would be great to see some compile-time numbers just to make sure this is tractable. I'm pretty sure -fsanitize=null would fire more often across a codebase than this check, so I don't anticipate a big surprise here.
================
Comment at: lib/CodeGen/CGExprScalar.cpp:222
+
+ // The stack of currently-visiting Cast expressions.
+ llvm::SmallVector<CastExpr *, 8> CastExprStack;
----------------
It would help to have this comment explain that the stack is used/maintained exclusively by the implicit cast sanitizer.
================
Comment at: lib/CodeGen/CGExprScalar.cpp:228
+
+ // We only care if we are to use this data.
+ bool Enabled() {
----------------
Could you make this comment more specific -- maybe by explaining that for efficiency reasons, the cast expr stack is only maintained when a sanitizer check is enabled?
================
Comment at: lib/CodeGen/CGExprScalar.cpp:234
+ public:
+ CastExprStackGuard(ScalarExprEmitter *SEE, CastExpr *CE) : SEE(SEE) {
+ if (!Enabled())
----------------
I think if you were to use references instead of pointers here, the code would be a bit clearer, and you wouldn't need to assert that CE is non-null.
================
Comment at: lib/CodeGen/CGExprScalar.cpp:351
+ ScalarConversionOpts()
+ : TreatBooleanAsSigned(false),
+ EmitImplicitIntegerTruncationChecks(false) {}
----------------
Why not use default member initializers here (e.g, "bool a = false")?
================
Comment at: lib/CodeGen/CGExprScalar.cpp:988
+ return Child == PreviousCast;
+ }))
+ return false;
----------------
The none_of call could safely be replaced by `Cast->getSubExpr() != PreviousCast`, I think.
Repository:
rC Clang
https://reviews.llvm.org/D48958
More information about the cfe-commits
mailing list