[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