================
@@ -407,6 +406,16 @@ void IncrementalParser::CleanUpPTU(PartialTranslationUnit 
&PTU) {
       }
     }
   }
+
+  // FIXME: We should de-allocate MostRecentTU
+  for (Decl *D : MostRecentTU->decls()) {
+    if (!isa<NamedDecl>(D))
+      continue;
+    // Check if we need to clean up the IdResolver chain.
+    NamedDecl *ND = cast<NamedDecl>(D);
----------------
vgvassilev wrote:

Hm. Ok I did not realize that code is smelly :)

We are getting a bit theoretical here but for the sake of the argument:

`isa<>` calls [CastInfo<To, const 
From>::isPossible](https://llvm.org/doxygen/structllvm_1_1CastIsPossible.html#a44e6fa462c45ccec1dcb2e52901e055d)(Val);

`cast<>` calls [CastInfo<To, const 
From>::doCast](https://llvm.org/doxygen/structllvm_1_1CastInfo.html#a143f6f757917e1245aed3882209b466f)(Val);

`dyn_cast<>` is both `isa + cast`.

My point was that in the case of something that's not a `NamedDecl` we will 
avoid the check `isPossible` for that case. It's probably peanuts: 
https://godbolt.org/z/xeh7jh5ax

Anyway, if you feel strongly about the other approach I can do it...

https://github.com/llvm/llvm-project/pull/89804
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to