[clang] [clang-tools-extra] Handle recording inheritance for templates (PR #177273)

Nathan Ridge via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 6 14:59:22 PST 2026


HighCommander4 wrote:

> for some odd reason explicit instantiations are treated as implicit ones, so I feel like here is some clean up to do too (see [this call](https://searchfox.org/llvm/source/clang/lib/Index/IndexDecl.cpp#784) returning true on [this](https://searchfox.org/llvm/source/clang/lib/Index/IndexingContext.cpp#189)), which ties again into, what even is the desired behaviour?

A note on terminology: an **explicit instantiation** is when you ask the compiler to explicitly instantiate a primary template for a particular set of arguments. For example:

```c++
// Primary template definition
template <typename T> void foo() {
  ...
}

// Explicitly ask for foo<int> to be instantiated
template void foo<int>();
```

(You can also forward-declare an explicit instantiation with `extern template void foo<int>();`, which amounts to telling the compiler that another translation unit will explicitly instantiate `foo<int>` and so the current translation unit should not, it should just emit references to a symbol that will be found at link time.)

By contrast, an **explicit specialization** is when you provide an alternative definition (different from the primary template definition) for a particular set of template arguments:

```c++
template <typename T> void foo()  {
  // primary template definition
}

template <> void foo<int>() {
  // different definition for foo<int>
}
```

With this terminology in mind, I think having libIndex's `IndexImplicitInstantiations` flag also enable indexing of explicit instantiations is probably fine, even if it means the flag name is not fully precise.

> I am pondering why when turning on the `IndexingOptions::IndexImplicitInstantiation` only explicit instantiations get Symbols and if that is desired behaviour. Not sure if this matters at all but for now it leads to a test failure

I'd need some more details to comment on this (e.g. what test, where are you looking to see what gets Symbols).

https://github.com/llvm/llvm-project/pull/177273


More information about the cfe-commits mailing list