================
@@ -1161,10 +1161,13 @@ class Parser : public CodeCompletionHandler {
     IdentifierInfo *MacroII = nullptr;
     SourceLocation AttrNameLoc;
     SmallVector<Decl *, 2> Decls;
+    unsigned NestedTypeLevel;
----------------
AaronBallman wrote:

I think it's still an implementation detail though; only bounds safety cares 
about the pointer indirection level and I don't think [m]any other attributes 
will need it.

I think what I'm asking for here is whether we should make this a bit more 
clear in the interface. Currently, (outside of bounds safety) 
`LateParsedAttribute` is only used with declaration attributes and so it has 
`addDecl()` as a method so you can associate the late parsed attribute with 
each declaration it might be applied to. I would expect types and statements to 
follow the same general idea where there's a higher-level coupling associated 
with the late parsed attribute, rather than attribute-specific information like 
the pointer indirection level. e.g., perhaps the a different approach is to 
store two `QualType`s; one `QualType` is the full type of a type which 
potentially will be using an attributed type at some level and the other 
`QualType` is the type the attribute is actually written on. Then the pointer 
indirection level can be calculated by the bounds safety attributes rather than 
part of the more general interface for late parsed attributes. e.g., `int * 
[[foo]] * [[bar]] *` would have two late parsed attributes. The full `QualType` 
is the same for each and is `int ***`, but one `LateParsedAttribute` gets a 
`QualType` of `int **` (for `bar`) and the other gets `int *` (for `foo`).

But because we're expanding the capabilities here... Do we want 
`LateParsedDeclAttribute` and `LateParsedTypeAttribute` with the common stuff 
in a base class? Do we want a discriminated union in `LatestParsedAttribute` so 
only one of the decls, type, (or eventually smt) is valid at a time? My concern 
with the current approach is that it's unclear which fields are actually used 
under what circumstances,. e.g., you can get a `LatedParsedAttribute` which 
sets `PointerIndirectionLevel` but is actually for a declaration attribute 
rather than a type attribute.


https://github.com/llvm/llvm-project/pull/166491
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to