[PATCH] D142014: [clangd] fix wrong CalleeArgInfo in the hover

Nathan Ridge via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Jan 22 23:13:52 PST 2023


nridge added a subscriber: adamcz.
nridge added a comment.

Thanks for the patch!

I had a look at the code history, and it looks like the original reason for not using the param decl's type to determine the passing mode was (based on this comment <https://reviews.llvm.org/D81169#inline-761047>) to handle cases like this correctly:

  struct C { C(int&); };
  void foo(const C&);
  int main() {
    int y;
    foo(y);
  }

However, your patch keeps this case working by keeping the check for a `CXXConstructExpr` and using the constructor's parameter decl instead (and this scenario has test coverage in the test `Hover.CallPassType`), so this seems fine to me, and indeed a nice simplification.

That said, I will cc @adamcz and @kadircet (as author and reviewer of the original patch) to see if they have any concerns about this refactoring breaking any other cases.



================
Comment at: clang-tools-extra/clangd/Hover.cpp:955
 
+HoverInfo::PassType::PassMode getPassMode(QualType QT) {
+  if (QT->isReferenceType()) {
----------------
nit: name the parameter `ParmType`, so it's clear whose type it's expecting


================
Comment at: clang-tools-extra/clangd/Hover.cpp:1032
+      } else {
+        PassType.PassBy = getPassMode(CD->getParamDecl(0)->getType());
         PassType.Converted = true;
----------------
Please explicily check `getNumParams()` before calling `getParamDecl(0)`. (Even though the constructpr //should// have at least one parameter, we don't want to risk crashing in the case of invalid code or some other unexpected situation.)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D142014



More information about the cfe-commits mailing list