[clang] [clang][ASTImporter] Fix import of template parameter default values. (PR #100100)
DonĂ¡t Nagy via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 23 07:49:15 PDT 2024
================
@@ -359,6 +359,31 @@ namespace clang {
Params, Importer.getToContext().getTranslationUnitDecl());
}
+ template <typename TemplateParmDeclT>
+ void tryUpdateTemplateParmDeclInheritedFrom(NamedDecl *RecentParm,
+ NamedDecl *NewParm) {
+ if (auto *ParmT = dyn_cast<TemplateParmDeclT>(RecentParm)) {
+ if (ParmT->hasDefaultArgument()) {
+ auto *P = cast<TemplateParmDeclT>(NewParm);
+ P->removeDefaultArgument();
+ P->setInheritedDefaultArgument(Importer.ToContext, ParmT);
+ }
+ }
+ }
+
+ void updateTemplateParametersInheritedFrom(
----------------
NagyDonat wrote:
```suggestion
/// Update the parameter list `NewParams` of a template declaration by
/// "inheriting" default argument values from `RecentParams`, which is
/// the parameter list of an earlier declaration of the same template.
/// (Note that "inheriting" default argument values this way is
/// completely unrelated to the usual object-oriented "inheritance"
/// relationship between classes.)
///
/// Note that the standard specifies that the same parameter cannot be
/// given default arguments twice in the same scope; but in our case
/// the parameter list `NewParams` is freshly imported from a
/// different TU, so it's possible that both `RecentParams` and
/// `NewParams` specify a default argument for the same parameter.
/// In this case, the code will use the default argument taken from
/// `RecentParams`.
/// FIXME: Report an error if the two default arguments are different.
void updateTemplateParametersInheritedFrom(
```
I felt that it is important to explain that the "Inherited" within the name of this function is unrelated to the usual object-oriented "inheritance" between classes; and as I started to write this comment, I also ended up documenting the goals of this function. (I hope that I was correct -- please fix this comment block if I misunderstood something!)
https://github.com/llvm/llvm-project/pull/100100
More information about the cfe-commits
mailing list