hnrklssn wrote:

> I think we shouldn't remove the assertion. Your test passes with the removal 
> of the assertion since the initializers are not complex. So it ends quickly. 
> But if it is a complex initialization which triggers more deserialization, I 
> feel it will be problematic.
> 
> I think the point is in `DeclMustBeEmitted`, this should be a "pure" method 
> but it triggers deserialization.
> 
> I think, the proper solution may be:
> 
>     1. When we write a VarDecl, use a bit to record whether the var decl has 
> an initialization with side effects.
> 
>     2. When we read a var decl with the above information, let's record it in 
> a set in ASTReader.
> 
>     3. When we decide if a VarDecl needs to be emitted in 
> `DeclMustBeEmitted`, let's lookup it in the above set.

Thanks for providing context! I'm not very familiar with this part of clang. I 
have a few clarifying questions:
`DeclMustBeEmitted` is part of `ASTContext` rather than  `ASTReader`, so unless 
I missed something it wouldn't have access to this set. We could check the "has 
initializer with side effect" set in `ASTReader` before the call to 
`DeclMustBeEmitted`, but unless we removed that piece of code from 
`DeclMustBeEmitted` it would still result in the initializer being 
deserialized, right? There are other callers that would not necessarily have 
an`ASTReader` in context, so I'm not sure how to go about that.

Actually, looking at the callers, one of them is `isRequiredDecl`, which is 
used to determine whether decls go into the `EagerlyDeserializedDecls` record. 
I'm not fully clear on how eagerly they are deserialized, but if the 
initializer is also eagerly deserialized, then maybe the `ASTReader` could skip 
calling `DeclMustBeEmitted` for `VarDecl`s that aren't fully deserialized, 
since they would have been in the `EagerlyDeserializedDecls` record if 
`DeclMustBeEmitted` returned true.

Another option would be to set some bits in `VarDecl::NonParmVarDeclBits` 
rather than creating a set in `ASTReader`.
WDYT?

https://github.com/llvm/llvm-project/pull/143739
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to