The inbuilt byond procs such as Cross(), Uncross() are defined and protected from redefinition (from using /proc) for /atom/movable, but are considered undefined and not protected from using /proc for /atom.
This inherently conflicts with the way all other proc definitions in the language are handled, and though I have not searched explicitly for problems that could result from this, some may theoretically occur.
This may be intended behavior within the language so that you can define these procs for any type, however I think such code runs into the problem of questionable inheritance (and the fact it looks really confusing when such code compiles).
Numbered Steps to Reproduce Problem:
1. Define the base movement procs for /atom and watch the code compile properly
Code Snippet (if applicable) to Reproduce Problem:
/atom/movable/Uncross()
return
/atom/proc/Uncross() This proc definition is not considered in conflict with an inbuilt byond proc definition
return
Expected Results:
To receive the compiler error: conflicts with built-in proc
Ah, so you agree with me then, defining Cross() for an atom should generate an error.