aaron.ballman added inline comments.

================
Comment at: clang/lib/Parse/ParseStmt.cpp:886-887
         TopLevelCase = Case;
-      else
+      else {
+        assert(DeepestParsedCaseStmt && "DeepestParsedCaseStmt cannot be 
null");
         Actions.ActOnCaseStmtBody(DeepestParsedCaseStmt, Case.get());
----------------
The `assert` doesn't add much value, this seems to be a false positive in the 
analysis.

If we have no top-level case statement yet, then we get into the `if` branch on 
line 884, but that then sets `DeepestParsedCaseStmt` on line 890, and that must 
be non-null because we verified that `Case` is valid above on line 876. So by 
the time we get into the `else` branch, `DeepestParsedCaseStmt` must be nonnull.

I don't think changes are needed here at all; WDYT?


================
Comment at: clang/lib/Sema/SemaExprObjC.cpp:2441
 
+  assert(receiverTypeInfo && "receiverTypeInfo cannot be null");
   return BuildClassMessage(receiverTypeInfo, ReceiverType,
----------------
schittir wrote:
> Fznamznon wrote:
> > That seems to be a strange place before and after changes. With or without 
> > change, when `ReceiverType.isNull()` is true we just end up passing 
> > `nullptr`  as `receiverTypeInfo ` to the `BuildClassMessage` which doesn't 
> > seem to be checking its non-nullness before dereferencing it, even though 
> > its description says that `receiverTypeInfo` can be null. 
> > I guess it is fine to pass `nullptr` to a function whose description says 
> > so, but the non-nullness check inside of it should be probably a bit more 
> > obvious than it is right now.
> I see your point about passing `ReceiverTypeInfo` as nullptr to 
> `BuildClassMessage` method - it seems ok to do that. 
> Would it make sense to add an `assert(ReceiverTypeInfo);` inside the method 
> as way of making the non-nullness check more obvious? 
I think there's a different assertion needed here. The invariant that 
`BuildClassMessage()` has is that the first argument (the `TypeSourceInfo *` 
needs to be nonnull if the third argument (the `SourceLocation`) is invalid. So 
I think this assert should be:

```
assert(((isSuperReceiver && Loc.isValid()) || receiverTypeInfo) &&
       "Either the super receiver location needs to be valid or the receiver 
needs valid type source information");
```


================
Comment at: clang/lib/Sema/SemaType.cpp:2711-2712
   // Only support _BitInt elements with byte-sized power of 2 NumBits.
   if (CurType->isBitIntType()) {
-    unsigned NumBits = CurType->getAs<BitIntType>()->getNumBits();
+    unsigned NumBits = CurType->castAs<BitIntType>()->getNumBits();
     if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {
----------------
Slightly better fix so we don't do "isa" followed by "cast".


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

https://reviews.llvm.org/D153236

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

Reply via email to