kimgr added a comment. It's a little confusing, because it now looks like _every_ `Type` in the AST is wrapped in an `ElaboratedTypeLoc` + `ElaboratedType`. IWYU's debug AST dump shows this (excerpt):
tests/cxx/sizeof_reference.cc:51:8: (1) [ VarDecl ] size_t s2
tests/cxx/sizeof_reference.cc:51:1: (2) [ ElaboratedTypeLoc ] size_t
tests/cxx/sizeof_reference.cc:51:1: (2) [ ElaboratedType ] size_t
tests/cxx/sizeof_reference.cc:51:1: (3) [ TypedefTypeLoc ] size_t
tests/cxx/sizeof_reference.cc:51:1: (3) [ TypedefType ] size_t
Marked full-info use of decl size_t (from
/home/kimgr/code/iwyu/out/main/lib/clang/15.0.0/include/stddef.h:46:23) at
tests/cxx/sizeof_reference.cc:51:1
tests/cxx/sizeof_reference.cc:51:13: (2) [ UnaryExprOrTypeTraitExpr ]
UnaryExprOrTypeTraitExpr 0x5589fd2a4230 'unsigned long' sizeof
'IndirectTemplateStruct<IndirectClass> &'
(For type IndirectTemplateStruct<IndirectClass>):
Marked full-info use of decl IndirectTemplateStruct (from
tests/cxx/sizeof_reference.cc:18:30) at tests/cxx/sizeof_reference.cc:51:20
tests/cxx/sizeof_reference.cc:51:20: (3) [ LValueReferenceTypeLoc ]
IndirectTemplateStruct<IndirectClass> &
tests/cxx/sizeof_reference.cc:51:20: (3) [ LValueReferenceType ]
IndirectTemplateStruct<IndirectClass> &
tests/cxx/sizeof_reference.cc:51:20: (4) [ ElaboratedTypeLoc ]
IndirectTemplateStruct<IndirectClass>
tests/cxx/sizeof_reference.cc:51:20: (4) [ ElaboratedType ]
IndirectTemplateStruct<IndirectClass>
tests/cxx/sizeof_reference.cc:51:20: (5) [ TemplateSpecializationTypeLoc ]
IndirectTemplateStruct<IndirectClass>
tests/cxx/sizeof_reference.cc:51:20: (5) [ TemplateSpecializationType ]
IndirectTemplateStruct<IndirectClass>
Marked fwd-decl use of decl IndirectTemplateStruct (from
tests/cxx/sizeof_reference.cc:18:30) at tests/cxx/sizeof_reference.cc:51:20
tests/cxx/sizeof_reference.cc:51:20: (6, fwd decl) [ TemplateName ]
IndirectTemplateStruct
tests/cxx/sizeof_reference.cc:51:43: (6, fwd decl) [ TemplateArgumentLoc ]
<IndirectClass>
tests/cxx/sizeof_reference.cc:51:43: (7, fwd decl) [ ElaboratedTypeLoc ]
IndirectClass
tests/cxx/sizeof_reference.cc:51:43: (7, fwd decl) [ ElaboratedType ]
IndirectClass
tests/cxx/sizeof_reference.cc:51:43: (8, fwd decl) [ RecordTypeLoc ] class
IndirectClass
tests/cxx/sizeof_reference.cc:51:43: (8, fwd decl) [ RecordType ] class
IndirectClass
Marked fwd-decl use of decl IndirectClass (from tests/cxx/indirect.h:18:7) at
tests/cxx/sizeof_reference.cc:51:43
tests/cxx/sizeof_reference.cc:55:8: (1) [ VarDecl ] size_t s3
tests/cxx/sizeof_reference.cc:55:1: (2) [ ElaboratedTypeLoc ] size_t
tests/cxx/sizeof_reference.cc:55:1: (2) [ ElaboratedType ] size_t
tests/cxx/sizeof_reference.cc:55:1: (3) [ TypedefTypeLoc ] size_t
tests/cxx/sizeof_reference.cc:55:1: (3) [ TypedefType ] size_t
Marked full-info use of decl size_t (from
/home/kimgr/code/iwyu/out/main/lib/clang/15.0.0/include/stddef.h:46:23) at
tests/cxx/sizeof_reference.cc:55:1
tests/cxx/sizeof_reference.cc:55:13: (2) [ UnaryExprOrTypeTraitExpr ]
UnaryExprOrTypeTraitExpr 0x5589fd2a4760 'unsigned long' sizeof
'IndirectTemplateStruct<IndirectClass &>':'struct IndirectTemplateStruct<class
IndirectClass &>'
for this line of code:
size_t s2 = sizeof(IndirectTemplateStruct<IndirectClass>&);
I'm not sure I understand why the elaborated type nodes are necessary even when
they don't seem to add any additional information?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112374/new/
https://reviews.llvm.org/D112374
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
