[LLVMdev] new warnings
John McCall
rjmccall at apple.com
Wed Apr 8 10:28:49 PDT 2009
On Apr 7, 2009, at 8:31 PM, Nick Lewycky wrote:
> But I'm not sure what it's complaining about. MDNode isa Constant,
> 'n1'
> isa MDNode*, hence &n1 isa MDNode**. Casting that to Constant**
> breaks strict-aliasing rules? Really?
Yes. Constant* is not the same type as MDNode*, ergo loading from an
MDNode** as if it were a Constant** is an aliasing violation. It's
also just a bad idea for several practical reasons:
1. C++ subtyping is coercive, i.e. it's not necessarily true that
converting an MDNode* to a Constant* is a no-op. It probably is in
this case, of course, or the code just wouldn't work.
2. Even if the coercion is a no-op, that cast can easily break the
type system if you, say, assign an arbitrary Constant* to the
Constant**.
John.
More information about the llvm-dev
mailing list