NoQ added inline comments.

================
Comment at: 
clang/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp:94-98
+  // If cast is implicit LValueToRValue, no conversion is taking place,
+  // and therefore no range check is needed.  Don't analyze further.
+  if (CE->getCastKind() == CK_LValueToRValue)
+    return;
+
----------------
If you look at the list of cast kinds, you'll be shocked to see ridiculously 
weird cornercases. Even though lvalue-to-rvalue cast definitely stands out 
(because it's the only one that has very little to do with actual casting), i'd 
still be much more comfortable if we *whitelist* the casts that we check, 
rather than blacklist them.

Can you take a look at the list and find which casts are we actually talking 
about and hardcode them here?


================
Comment at: clang/test/Analysis/enum-cast-out-of-range.c:27-34
+enum unscoped_unspecified_t unused;
+void unusedExpr() {
+    // following line is not something that EnumCastOutOfRangeChecker should 
evaluate.  checker should either ignore this line
+    // or process it without producing any warnings.  However, compilation 
will (and should) still generate a warning having 
+    // nothing to do with this checker.
+    unused; // expected-warning {{expression result unused}}
+}
----------------
I guess this covers D33672#1537287!

That said, there's one thing about this test that i don't understand. Why does 
this AST contain an implicit lvalue-to-rvalue cast at all? This looks like a 
(most likely otherwise harmless) bug in the AST; if i understand correctly, 
this should be a freestanding `DeclRefExpr`.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66014/new/

https://reviews.llvm.org/D66014



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to