dblaikie added a comment.

In D90719#2387379 <https://reviews.llvm.org/D90719#2387379>, @akhuang wrote:

> + @ldionne for libc++ input?
>
> To summarize, this constructor homing debug info optimization makes the 
> assumption that if a class is being used then its constructor must have been 
> called at some point. We noticed that some libc++ types (such as __hash_node) 
> are nontrivial but the constructor is never called (instead there's some 
> allocation and then the members are constructed separately).
>
> Basically we're not sure if this can be fixed from the libc++ side but it 
> would be nice to have some more input about this. For example would it be 
> possible to call the constructor when __hash_node is created?
>
>> My guess would be that this doesn't come up often enough to merit an 
>> attribute, etc, and that libc++ is fixable. (if the code really wants to do 
>> no work when constructing, changing the type to have a trivial ctor and the 
>> places that want non-trivial construction can initialize the members as 
>> needed seems like it'd be viable)
>
> I looked at the code again and `__hash_node` also has nontrivial members, so 
> maybe it's not as feasible to make it a nontrivial constructor.

At least my thinking is: If this type is being constructed without executing a 
constructor and the code is correct (modulo UB, but correct for the behavior it 
happens to be getting) then it doesn't really need those ctors to run - so 
perhpas they shouldn't be there either/should be trivial, because they're not 
being used, at least here. That's my theory, at least.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D90719

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

Reply via email to