dexonsmith added inline comments.

================
Comment at: test/Misc/pragma-attribute-supported-attributes-list.test:50
 // CHECK-NEXT: EnumExtensibility (SubjectMatchRule_enum)
+// CHECK-NEXT: ExtVectorType (SubjectMatchRule_type_alias)
 // CHECK-NEXT: ExternalSourceSymbol ((SubjectMatchRule_record, 
SubjectMatchRule_enum, SubjectMatchRule_enum_constant, SubjectMatchRule_field, 
SubjectMatchRule_function, SubjectMatchRule_namespace, 
SubjectMatchRule_objc_category, SubjectMatchRule_objc_interface, 
SubjectMatchRule_objc_method, SubjectMatchRule_objc_property, 
SubjectMatchRule_objc_protocol, SubjectMatchRule_record, 
SubjectMatchRule_type_alias, SubjectMatchRule_variable))
----------------
aaron.ballman wrote:
> dexonsmith wrote:
> > rsmith wrote:
> > > I think `__attribute__((ext_vector_type))` is a good candidate to *not* 
> > > have `#pragma clang attribute` support. A type modifier like this really 
> > > should only be declared as part of declaring the type. Opinions?
> > The same argument might hold for most type attributes.  I have trouble 
> > imagining someone using this, but it's also hard to see how supporting it 
> > would lead to bugs in user code.  It seems a bit simpler to support 
> > everything.
> > 
> > I don't have a strong opinion though.
> I don't think `#pragma clang attribute` should apply to types -- types show 
> up in far too many places and attributes on types changes the fundamental 
> meaning of types a bit too much for my tastes. I'd prefer users annotate the 
> type directly.
> types show up in far too many places and attributes on types changes the 
> fundamental meaning of types a bit too much for my tastes

I don't see how region-based attributes on type aliases is really any different 
from region-based annotations on variables.

Moreover, I'm strongly against disallowing use of this pragma on type aliases 
in general: as a vendor, we've already shipped that support for a number of 
attributes.  Most critically, ExternalSourceSymbol applies to type aliases, and 
handling ExternalSourceSymbol was our primary motivation for adding this 
feature (the alternative was to add yet-another-attribute-specific-`#pragma`).


================
Comment at: test/Misc/pragma-attribute-supported-attributes-list.test:100
+// CHECK-NEXT: ObjCReturnsInnerPointer (SubjectMatchRule_objc_method, 
SubjectMatchRule_objc_property)
+// CHECK-NEXT: ObjCRootClass (SubjectMatchRule_objc_interface)
 // CHECK-NEXT: ObjCRuntimeName (SubjectMatchRule_objc_interface, 
SubjectMatchRule_objc_protocol)
----------------
kristina wrote:
> rsmith wrote:
> > kristina wrote:
> > > There is only one root class in a given runtime (ie. NSObject for objc4, 
> > > or Object for older Apple runtimes, ObjFW also has a different root 
> > > class). Having more than one makes no sense especially in the same 
> > > lexical context as there are no use cases I can think of where you would 
> > > have more than one active ObjC runtime within a process.
> > Thanks. Yes, this attribute probably doesn't make very much sense to use in 
> > conjunction with the pragma.
> > 
> > So, do we explicitly disallow it, or do we allow it with the expectation 
> > that it's likely that no-one will ever want to use it? (That is, do we want 
> > to disallow cases that are not useful, or merely cases that are not 
> > meaningful?) I don't have a strong opinion here, but I'm mildly inclined 
> > towards allowing the pragma on any attribute where it's meaningful, as 
> > there may be useful uses that we just didn't think of, and it costs nothing 
> > to permit.
> Yes in theory it could only be used on a single interface in which case it 
> would be perfectly valid. Otherwise when used incorrectly it would issue a 
> diagnostic. As per your inclination of allowing it for all attributes I would 
> say leave it allowed, as it **can** be used in a correct way. Diagnostics are 
> sufficient enough to point out when it happens to apply the attribute to more 
> than one interface.
> 
> So given your comment, I would say leave it as allowed.
> So, do we explicitly disallow it, or do we allow it with the expectation that 
> it's likely that no-one will ever want to use it? (That is, do we want to 
> disallow cases that are not useful, or merely cases that are not meaningful?) 

I'd prefer to only disallow cases that are not meaningful.


Repository:
  rC Clang

https://reviews.llvm.org/D51507



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

Reply via email to