andrey-golubev wrote:

> I think it's an ABI change (but I could be wrong), because some of the 
> implicit constructors are being deleted. What happens if a user of the 
> library was using these deleted constructors?

I see your point. In this specific case, the special member functions were 
implicitly deleted anyway: the class used to have an explicit user-specified 
(non-default) copy ctor and that's about it. There is at least 1 member field 
in `Pass` that is non-movable and non-copyable. No copy-assignment operator -> 
implicitly deleted. No move semantics: move ctor would've dispatched to copy 
ctor, move assignment - implicitly deleted also. So the only case we've 
sacrificed with this patch is `X x(X())` (and other cases that call move ctor) 
- they are now rejected by the compiler instead of silently succeeding.

Also, the users, I believe, are only within the inheritance chain, because all 
of this special member functions (except dtor) are under `protected` access 
specifier (unless there's some user lib that changes this at some lower level?).

In any case, if there's already a released 18.0 then this change would only get 
into some other version and, as you mentioned, this is something you prefer to 
avoid for API/ABI incompatible changes.

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

Reply via email to