ldionne marked 2 inline comments as done.
ldionne added inline comments.

================
Comment at: clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:1268
+  // Instantiate the attributes on both the template declaration and the 
associated record declaration.
+  SemaRef.InstantiateAttrsForDecl(TemplateArgs, Pattern, Inst, LateAttrs, 
StartingScope);
+  SemaRef.InstantiateAttrsForDecl(TemplateArgs, Pattern, RecordInst, 
LateAttrs, StartingScope);
----------------
erik.pilkington wrote:
> Why are you instantiating the attributes onto the ClassTemplateDecl? At the 
> very least it seems wrong to instantiate attributes from the pattern to the 
> ClassTemplateDecl.
My understanding was that
- `Inst` represented `B<int>::X<T>` (the template)
- `RecordInst` represented `B<int>::X<int>` (the template specialization, which 
is a "real struct")
- `Pattern`  represented `B<T>::X<T>`

If that is right, then it seemed to make sense that both `B<int>::X<T>` and 
`B<int>::X<int>` should have the attribute, since `B<T>::X<T>` has it. I might 
be misunderstanding something though.


================
Comment at: clang/test/SemaCXX/PR38913.cpp:19
+};
+C<int>::X<int, long>* c() { return 0; } // CHECK-DAG: @_Z1cB4CTAGv
+
----------------
erik.pilkington wrote:
> ldionne wrote:
> > This test is failing in the current iteration of the patch.
> I think the problem here is that we don't instantiate X<int, long> because 
> it's behind the pointer, so we're just considering the primary template. 
> Looks like we do add the attribute (with the fix above) here:
> ```
> template<class T> struct C {
>   template<class U, class V> struct X { };
>   template<class V> struct __attribute__((abi_tag("CTAG"))) X<int, V> { };
> };
> C<int>::X<int, long> c() { return 0; }
> ```
> But we don't get the right mangling, for some reason. Note that this problem 
> is present even in the non-member case. 
> 
> I don't think attributes on specializations have particularly good support 
> anyways, so I wouldn't really lose any sleep if we "left this to a 
> follow-up". Maybe @rsmith has some thoughts here.
I'll drop support for specializations for now. The current patch is enough to 
unblock me on the `no_extern_template` attribute, which is the goal of all of 
this.


Repository:
  rC Clang

https://reviews.llvm.org/D51997



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to