xazax.hun added inline comments.

================
Comment at: clang/include/clang/Basic/Attr.td:2770
+def Owner : InheritableAttr {
+  let Spellings = [CXX11<"gsl", "Owner">];
+  let Subjects = SubjectList<[CXXRecord]>;
----------------
aaron.ballman wrote:
> xazax.hun wrote:
> > aaron.ballman wrote:
> > > Has Microsoft already added support for this? We had an unfortunate 
> > > problem with `gsl::suppress` where we introduced the attribute first and 
> > > MSVC introduced it under a different, incompatible syntax. I would 
> > > strongly like to avoid repeating that.
> > I will double check this. Her Sutter's paper have this spelling and I 
> > believe that the Microsoft implementation is following the same spelling. 
> > The main difference is that the MSVC version does not have a type argument 
> > at this point but they do plan to add it as an optional argument. (They 
> > want to infer the pointee type when it is not provided.) The clang 
> > community do not want the inference, hence we made the type argument 
> > required. Always providing the type argument should be compatible with 
> > future versions of the MSVC implementation.
> I take this to mean that we're not implementing the same attribute as MSVC 
> is, and that worries me.
> 
> > Always providing the type argument should be compatible with future 
> > versions of the MSVC implementation.
> 
> The problem is that code written for MSVC (where the type argument is not 
> required) will not compile with Clang (where the type argument is required), 
> if I understand properly.
> 
> Generally speaking, when we implement an attribute from another vendor 
> namespace, we expect the attribute to have the same semantics as whoever 
> "owns" that vendor namespace. It's a bit trickier here because `gsl` isn't 
> really a vendor so much as a collective, so I don't know who is the authority 
> to turn to.
> 
> On a completely different note: would this attribute also make sense within C 
> with a C2x spelling?
I see, that is a valid concern. A followup patch makes the type argument 
optional so it will be fully compatible with MSVC.  I don't think it makes 
sense with C or at least I am not sure what would I annotate using these 
attributes in C code as the subjects are classes. I know that it is possible to 
simulate classes in C but I am not sure how well the analysis would work in 
such cases. 

Are you OK with making the argument optional in a followup patch or do you want 
us to cherry-pick that modification into this one?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63954/new/

https://reviews.llvm.org/D63954



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

Reply via email to