SouraVX added a comment. In D68117#1702595 <https://reviews.llvm.org/D68117#1702595>, @probinson wrote:
> We really do want to pack the four mutually exclusive cases into two bits. I > have tried to give more explicit comments inline to explain how you would do > this. It really should work fine, recognizing that the "not defaulted" case > is not explicitly represented in the textual IR because it uses a zero value > in the defaulted/deleted subfield of SPFlags. Thanks Paul, for suggesting this. Your approach works fine. But as I was working on some lvm-dwarfdump test cases. We seems to miss one corner case -- Consider this test case; class foo{ foo() = default; ~foo() = default; void not_special() {} }; void not_a_member_of_foo(){} Now I'm getting DW_AT_defaulted getting emitted with value DW_DEFAULTED_no, for functions "not_special" and "not_a_member_of_foo". This behavior is undesirable since, DW_AT_defaulted attributes is only valid for C++ special member functions{Constructors/Destructors, ...}. Please correct me if I'm wrong -- Now This attributes to- implicitly defined "0" NotDefaulted bit. which is getting checked{that's fine as long as we have a dedicated bits for distinguishing} and true for every subprogram or function in a CU. void DwarfUnit::applySubprogramAttributes( ... ... else if (SP->isNotDefaulted()) addUInt(SPDie, dwarf::DW_AT_defaulted, dwarf::DW_FORM_data1, dwarf::DW_DEFAULTED_no); ... CHANGES SINCE LAST ACTION https://reviews.llvm.org/D68117/new/ https://reviews.llvm.org/D68117 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits