erichkeane accepted this revision.
erichkeane added inline comments.

================
Comment at: clang/test/FixIt/fixit-const-var-init.cpp:24
+
+template <> constexpr float d<int, float>; // expected-error {{must be 
initialized by a constant expression}}
+// CHECK: fix-it:"{{.*}}":{24:42-24:42}:" = 0.0"
----------------
aaron.ballman wrote:
> v1nh1shungry wrote:
> > aaron.ballman wrote:
> > > v1nh1shungry wrote:
> > > > aaron.ballman wrote:
> > > > > I'd like to see some additional test coverage for more complicated 
> > > > > declarators:
> > > > > ```
> > > > > void (* const func)(int, int);
> > > > > const int var [[clang::annotate("")]];
> > > > > ```
> > > > One more question: I just did the second test
> > > > 
> > > > ```
> > > > const int var [[clang::annotate("")]];
> > > > ```
> > > > 
> > > > and it inserted the fix hint after the identifier.
> > > > 
> > > > Is this the expected behavior of `getEndLoc()`?
> > > @erichkeane and I talked about this off-list because it's a bit of an 
> > > academic question as to whether an attribute is "part" of a declaration 
> > > or not. We ultimately decided that we think it's best for the attribute 
> > > to *not* be considered part of the source range of the variable 
> > > declaration; they are wholly separate AST nodes.
> > > 
> > > So based on that, we think you will need some changes to SemaInit.cpp 
> > > after all. And you'll have to use 
> > > `SourceManager::isBeforeInTranslationUnit()` to determine if the begin 
> > > source location of the attribute is after the end source location of the 
> > > variable or not (because the attribute could go before the type 
> > > information or after the variable name).
> > > 
> > > There's another test case to consider that hopefully will Just Work with 
> > > this design, but is worth testing explicitly:
> > > ```
> > > void (* const func [[clang::annotate("test")]])(int, int);
> > > ```
> > I have trouble getting the location of the right bracket of the attribute 
> > list, which may be used to insert the fix hint. Could you please give me 
> > some hints? Thanks a lot!
> > I have trouble getting the location of the right bracket of the attribute 
> > list, which may be used to insert the fix hint. Could you please give me 
> > some hints? Thanks a lot!
> 
> Oh boy, that's an interesting problem, isn't it! We keep all of the attribute 
> AST nodes with the declaration, and each attribute knows its own source 
> range, but we *don't* keep the source locations for where the full attribute 
> list appears. e.g.,
> ```
> __attribute__((foo)) const int var [[bar, baz]];
> ```
> `var` will have three attributes associated with it, but the only source 
> location information you have access to is for the `foo`, `bar`, and `baz` 
> tokens. Each of those attributes also keeps track of what syntax was used, so 
> you could tell that `foo` was a GNU-style attribute while `bar` and `baz` 
> were C++. But we don't keep enough information about `bar` and `baz` being 
> part of the same attribute list or whether that attribute list is leading or 
> trailing. You have to calculate all of this yourself and some of it might not 
> even be possible to calculate (for example, the user could have done 
> `__attribute__((foo)) const int var [[bar]] [[baz]];` and the AST would come 
> out the same as the previous example).
> 
> I'd say that's way more work than is reasonable for this patch, so my 
> suggestion is to file a GitHub issue about the problem with attributes, note 
> the implementation issues, and then we'll ignore attributes for this patch.
> 
> @erichkeane -- something for us to consider is how to improve this in the 
> AST. We run into problems when doing AST pretty printing because of 
> attributes for these same reasons. It seems to me that the 
> `Decl`/`Stmt`/`TypeLoc` nodes need to keep a list of source ranges for 
> attributes around (since there can be multiple ranges for declarations). WDYT?
I took conversation to the bug here: 
https://github.com/llvm/llvm-project/issues/59935


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D139705

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

Reply via email to