I believe that GCC, when running on LTO mode, embeds exactly this kind of 'hairy metadata' (IIRC the gimple code for the function) and is capable in principle of identifying ODR violations. I have to try this capability myself though, so I don't know how effective it is.
edit: reading the docs again, it seems that it only detects ODR violations of the layout of types (and vtables).
edit: reading the docs again, it seems that it only detects ODR violations of the layout of types (and vtables).