[PATCH] D54996: [libclang] Fix clang_Cursor_isAnonymous
Jorn Vernee via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Apr 27 06:38:28 PDT 2019
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
More information about the cfe-commits
mailing list