usaxena95 updated this revision to Diff 493538. usaxena95 added a comment. Moved the use of definition where fields are accessed. This now resolves several other C++20/Module related crashes as well.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D142384/new/ https://reviews.llvm.org/D142384 Files: clang/include/clang/AST/Decl.h clang/include/clang/AST/DeclCXX.h Index: clang/include/clang/AST/DeclCXX.h =================================================================== --- clang/include/clang/AST/DeclCXX.h +++ clang/include/clang/AST/DeclCXX.h @@ -554,6 +554,11 @@ bool hasDefinition() const { return DefinitionData || dataPtr(); } + RecordDecl::field_iterator field_begin() const override { + assert(hasDefinition() && "Definition not available to get fields."); + return static_cast<const RecordDecl *>(getDefinition())->field_begin(); + } + static CXXRecordDecl *Create(const ASTContext &C, TagKind TK, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, Index: clang/include/clang/AST/Decl.h =================================================================== --- clang/include/clang/AST/Decl.h +++ clang/include/clang/AST/Decl.h @@ -4220,7 +4220,7 @@ using field_range = llvm::iterator_range<specific_decl_iterator<FieldDecl>>; field_range fields() const { return field_range(field_begin(), field_end()); } - field_iterator field_begin() const; + virtual field_iterator field_begin() const; field_iterator field_end() const { return field_iterator(decl_iterator());
Index: clang/include/clang/AST/DeclCXX.h =================================================================== --- clang/include/clang/AST/DeclCXX.h +++ clang/include/clang/AST/DeclCXX.h @@ -554,6 +554,11 @@ bool hasDefinition() const { return DefinitionData || dataPtr(); } + RecordDecl::field_iterator field_begin() const override { + assert(hasDefinition() && "Definition not available to get fields."); + return static_cast<const RecordDecl *>(getDefinition())->field_begin(); + } + static CXXRecordDecl *Create(const ASTContext &C, TagKind TK, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, Index: clang/include/clang/AST/Decl.h =================================================================== --- clang/include/clang/AST/Decl.h +++ clang/include/clang/AST/Decl.h @@ -4220,7 +4220,7 @@ using field_range = llvm::iterator_range<specific_decl_iterator<FieldDecl>>; field_range fields() const { return field_range(field_begin(), field_end()); } - field_iterator field_begin() const; + virtual field_iterator field_begin() const; field_iterator field_end() const { return field_iterator(decl_iterator());
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits