According to https://llvm.org/docs/LangRef.html#opaque-structure-types
Opaque structure types are used to represent structure types that do not have a body specified. This corresponds (for example) to the C notion of a forward declared structure. They can be named (%X) or unnamed (%52).
Seems straightforward enough, but one thing I'm trying to figure out is this. Suppose we have two opaque types:
%X = type opaque
%Y = type opaque
Does LLVM ever care about the fact that these are two different types? Is there any scenario in which substituting X for Y would cause different code to be generated? One possibility that comes to mind is type-based alias analysis, but then, it is not possible to dereference an opaque type, so it looks like there is no way for it to make a difference. Am I missing anything?