aaron.ballman added inline comments.

================
Comment at: lib/AST/ASTDumper.cpp:642
 
-  if (!D->param_begin() && D->getNumParams())
-    dumpChild([=] { OS << "<<NULL params x " << D->getNumParams() << ">>"; });
-  else
-    for (const ParmVarDecl *Parameter : D->parameters())
+  if (D->param_begin() || !D->getNumParams())
+    for (const auto *Parameter : D->parameters())
----------------
aaron.ballman wrote:
> You can drop `getNumParams()` here -- if `param_begin()` returns a non-null 
> value, `getNumParams()` must return a non-zero value.
> 
> (`param_begin()` is implemented in terms of `parameters()`, which calls 
> `getNumParams()` when setting up the returned `ArrayRef`.)
It seems that this is needed because the situation can arise when the function 
is not fully constructed yet, such as when calling `dump()` under the debugger.

I think this can be more clearly expressed as `if (!D->param_empty() && 
!D->param_begin())`, but should also have some comments explaining that this is 
guarding against a situation that only comes up while debugging, and thus is 
not covered by any existing test cases.


Repository:
  rC Clang

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

https://reviews.llvm.org/D56753



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

Reply via email to