rsmith added a comment. In D57626#1382391 <https://reviews.llvm.org/D57626#1382391>, @Quuxplusone wrote:
> I admit that this `lock_guard` example is contrived and generally ill-advised > <https://quuxplusone.github.io/blog/2018/11/12/parameter-lifetime-and-trivial-abi/>, > but its ill-advisedness seems like a higher-level concern that shouldn't be > "enforced" by fiddling with the rules of [[trivial_abi]], so I hope that's > not what's going on here. `[[trivial_abi]]` (at least right now) only affects whether user-provided special member functions are considered to be trivial for ABI purposes. A class whose copy and move constructor are both deleted is not passed in registers by the ABI; that has nothing to do with triviality, so it's unaffected by `[[trivial_abi]]` as currently specified. We could "fiddle with the rules of [[trivial_abi]]" to *make* that work (that's what the previous approach for this case did), but as you note, this is an ill-advised case, and fiddling with the rules to give it special behavior doesn't seem like worthwhile complexity. Our design intent was to produce a diagnostic if `[[trivial_abi]]` is specified on a non-template class that we can't actually pass in registers; this patch fixes a hole in our implementation of that design by adding a missing diagnostic. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D57626/new/ https://reviews.llvm.org/D57626 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits