================
@@ -2625,9 +2625,11 @@ 
AddOrdinaryNameResults(SemaCodeCompletion::ParserCompletionContext CCC,
 
     // "return expression ;" or "return ;", depending on the return type.
     QualType ReturnType;
-    if (const auto *Function = dyn_cast<FunctionDecl>(SemaRef.CurContext))
-      ReturnType = Function->getReturnType();
-    else if (const auto *Method = dyn_cast<ObjCMethodDecl>(SemaRef.CurContext))
+    if (const auto *Function = dyn_cast<FunctionDecl>(SemaRef.CurContext)) {
+      if (!Function->getType().isNull())
----------------
AaronBallman wrote:

Code completion is a bit weird because we have to handle every invalid 
construct imaginable, so it has to deal with invalid nodes a lot more than 
other parts of the compiler I think. We do a similar check below:
```
    if (ReturnType.isNull() || ReturnType->isVoidType()) {
```

But at the same time, I'd expect `CurContext` to be an invalid declaration in 
this case; perhaps we should just bail early if the `CurContext` is invalid?

> Also, I don’t think we have a maintainer for code completion do we

We do not; Perhaps clangd maintainers might be the most familiar? CC 
@HighCommander4 @ArcsinX 

https://github.com/llvm/llvm-project/pull/206373
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to