I read that single unix specification thing again because the OpenBSD cp manpage says it is expected to be IEEE Std 1003.2 (``POSIX.2'') compatible.
<quote> For each source_file, the following steps shall be taken: 1) If source_file references the same file as dest_file, cp may write a diagnostic message to standard error; it shall do nothing more with source_file and shall go on to any remaining files. </quote> _may_ write a diagnostic message, and all the rest is implementation-defined So, for sure, it's not "wrong" behaviour if you look at posix.