hahnjo wrote:
> Maybe you can test it with this and land it with different patches. So that
> we can revert one of them if either of them are problematic but other parts
> are fine.
I'm ok with pushing the commits one-by-one after the PR is reviewed, just let
me know.
> > Complete only needed partial specializations: It is unclear (to me) why
> > this needs to be done "for safety", but this change significantly improves
> > the effectiveness of lazy loading.
>
> This comes from the logic: if we have a partial template specialization
> `A<int, T, U>` and we need a full specialization for `A<int, double,
> double>`, we hope the partial specialization to be loaded
Sure, but in my understanding, that's not needed on the `ASTReader` side but is
taken care of by `Sema` (?). For the following example:
```c++
//--- partial.cppm
export module partial;
export template <typename S, typename T, typename U>
struct Partial {
static constexpr int Value() { return 0; }
};
export template <typename T, typename U>
struct Partial<int, T, U> {
static constexpr int Value() { return 1; }
};
//--- partial.cpp
import partial;
static_assert(Partial<int, double, double>::Value() == 1);
```
(I assume that's what you have in mind?) I see two calls to
`ASTReader::CompleteRedeclChain` (with this PR applied): The first asks for the
full instantiation `Partial<int, double, double>` and regardless of what we
load, the answer to the query is that it's not defined yet. The second asks for
the partial specialization `Partial<int, T, U>` and then instantiation proceeds
to do the right thing.
https://github.com/llvm/llvm-project/pull/133057
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits