[PATCH] D39127: Fix template parameter default args missed if redecled

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Oct 22 17:08:36 PDT 2017


erichkeane added inline comments.


================
Comment at: lib/Sema/SemaTemplate.cpp:4811
+  TemplateParameterList *Params =
+      cast<TemplateDecl>(Template->getMostRecentDecl())
+          ->getTemplateParameters();
----------------
mstorsjo wrote:
> erichkeane wrote:
> > mstorsjo wrote:
> > > How does this work if there's another forward declaration missing the parameter later? Is the logic with "most recent" ok, or should it be "most qualified/complete" instead?
> > I'm not sure the case you mean.  Any future declarations with fewer parameters would be aspecialization and a different decl, right?
> Sorry, I meant a declaration with fewer defaults. E.g. the original forward declaration without defaults again after the actual definition.
> 
> E.g. by adding
> 
> ```
> namespace llvm {
>   template<typename T > struct StringSet;
> }
> ```
> before the last `namespace lld`.
> 
> 
I think thats OK.  The code propagates those forward.  The problem here is that it does NOT propagate them backwards.


https://reviews.llvm.org/D39127





More information about the cfe-commits mailing list