martong added a comment.

> as it is something which is actually in production already
> ...
> At the very least we need it for compatibility - this is already a shipping 
> feature.

I value that you guys have a prototype on a fork that is being used in 
production. But, upstreaming and these reviews give us the chance to evolve and 
to create an implementation that serves well the //whole// Clang community. I 
am having a hard time to accept //"this is how it is implemented in our fork"// 
as a technical argument. Besides, I am not sure how could the Clang community 
benefit about being backward compatible with a specialized fork and thus making 
superfluous complications. This feature could be really valuable, but I'd like 
to have it landed in a high quality form which serves the whole community (and 
the static analyzer developers). I think that a simple copy-paste of the fork 
will not do it.



================
Comment at: clang/include/clang/APINotes/Types.h:1
+//===-- Types.h - API Notes Data Types --------------------------*- C++ 
-*-===//
+//
----------------
compnerd wrote:
> martong wrote:
> > So we are mapping existing attributes here, I am missing this to be 
> > documented. Why do we support only these attributes?
> > Would be consistent to put `SwiftPrivate` here as well, instead of 
> > implicitly interpreting that as `bool` in `APINotesYAMLCompiler.cpp`, 
> > wouldn't it?
> > I think we should list all processed attributes here, or we should just use 
> > `Attrs.inc` (see below my comment as well).
> These are the ones that are currently needed and can be safely merged.  I 
> really wouldn't want to extend the support to all the attributes in the 
> initial attempt to merge the functionality as it is something which is 
> actually in production already.  However, once the functionality is in a 
> shared state, it is much easier to revise and co-evolve other consumers.
I understand that an initial implementation may not support all attributes. 
What's more, an evolved implementation may not do that either. 

Including `Attrs.inc` does not put any requirement to support all attributes, 
but we could reuse the types and enums there. This way we could avoid the need 
to mirror the types in `Attrs.inc`.



================
Comment at: clang/lib/APINotes/APINotesYAMLCompiler.cpp:240
+namespace {
+struct Class {
+  StringRef Name;
----------------
compnerd wrote:
> martong wrote:
> > Why are these classes in a unnamed namespace? I'd expect them to be in the 
> > header under the `clang::api_notes` namespace, so users of the 
> > APINotesYAMLCompiler could use these as the structured form of the YAML 
> > content. Isn't that the point of the whole stuff?
> There will be follow up types that provide structured access to the data.  
> These types are strictly for the serialization to and from YAML via 
> `YAML::IO`.
Sounds good. Could you please describe in a nutshell which are the following 
steps for the upstreaming? I mean it could make the review easier if we could 
see a kind of road-map for the upcoming patches.


================
Comment at: clang/lib/APINotes/APINotesYAMLCompiler.cpp:439
+  static void enumeration(IO &IO, EnumExtensibilityKind &EEK) {
+    IO.enumCase(EEK, "none",   EnumExtensibilityKind::None);
+    IO.enumCase(EEK, "open",   EnumExtensibilityKind::Open);
----------------
compnerd wrote:
> martong wrote:
> > Hmm, why do we need "none"? Can't we interpret the non-existence as "none"?
> At the very least we need it for compatibility - this is already a shipping 
> feature.  However, nullability is also not completely annotated.  So, there 
> is some benefit in tracking the explicit none vs missing.
`Optional<EnumExtensibilityAttr::Kind>` ?


================
Comment at: clang/test/APINotes/yaml-roundtrip.test:4
+
+We expect only the nullability to be different as it is canonicalized during 
the
+roudtrip.
----------------
compnerd wrote:
> martong wrote:
> > Why do we have this difference? This seems odd and as a superfluous 
> > complexity.
> The difference is needed for compatibility.  Richard wanted the fully spelt 
> out names, but that requires backwards compatibility, so we need the 
> difference here.
I have concerns about making things more complicated just to be compatible with 
a downstream fork.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D88859

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

Reply via email to