[LLVMdev] Undefined behavior in Operator class?

Sean Silva silvas at purdue.edu
Sun Oct 7 08:34:26 PDT 2012


>> In this function, the `this` pointer is not pointing at an Operator
>> object. That's undefined behavior, right?
>
> Yes.

Well then I guess the next step is how to fix it.

Maybe someone with a bit more experience with the Operator code and
how it is used could make a suggestion? (I just stumbled upon this
code yesterday while doing some refactoring, so I'm not intimately
familiar with how it is generally used).

I would really rather not use multiple inheritance for this. It looks
like a lot of what it does could be maybe be done through traits? Can
someone with more experience with the code weigh in?

-- Sean Silva

On Sun, Oct 7, 2012 at 12:28 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Sat, Oct 6, 2012 at 8:43 PM, Sean Silva <silvas at purdue.edu> wrote:
>> If I understand correctly, Operator is basically a trivial temporary
>> object that holds some common functionality for both Instruction and
>> ConstantExpr.
>>
>> It looks to me like Operator is doing something illegal though. For
>> example, in this member function of class Operator (in
>> include/llvm/Operator.h):
>>
>>   /// getOpcode - Return the opcode for this Instruction or ConstantExpr.
>>   ///
>>   unsigned getOpcode() const {
>>     if (const Instruction *I = dyn_cast<Instruction>(this))
>>       return I->getOpcode();
>>     return cast<ConstantExpr>(this)->getOpcode();
>>   }
>>
>> In this function, the `this` pointer is not pointing at an Operator
>> object. That's undefined behavior, right?
>
> Yes.
>
> -Eli



More information about the llvm-dev mailing list