JornVernee added a comment.
Herald added a project: LLVM.

This seems to have changed the behaviour w.r.t inline struct or union decls in 
fields and global variables e.g.

  struct foo {
      struct {
          int x;
      } bar;
  };

For the StructDecl cursor of 'bar' isAnonymous now returns true, instead of 
false.

I guess this was intended? But we were relying on this behaviour to collect all 
nested elements that were accessible through the parent struct, e.g.

  struct foo {
      struct {
          int x;
      } bar;
      union {
          int y;
          int z;
      };
  };

'y' and 'z' are accessible directly through foo by doing `foo.y` and `foo.z.`, 
but 'x' is not, we have to do `foo.bar.x`. Since isAnonymous now returns true 
for both 'bar' and the 'inlined' anonymous union, there is no easy way to 
differentiate between whether it appears as part of a FieldDecl or not. The 
only alternative is to look up the semantic parent, create a set of all the 
FieldDecl cursors, and then filter by the field's type's declaration cursors. 
(which is kind of 'meh' for usability/performance).

Any alternative to get the old behaviour?


Repository:
  rL LLVM

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

https://reviews.llvm.org/D54996



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

Reply via email to