[LLVMbugs] [Bug 7658] New: Segmentation fault during refineAbstractTypeTo with certain structure types and ConstantStruct objects

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Jul 15 21:36:24 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=7658

           Summary: Segmentation fault during refineAbstractTypeTo with
                    certain structure types and ConstantStruct objects
           Product: libraries
           Version: 2.7
          Platform: Macintosh
        OS/Version: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: Core LLVM classes
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: clemahieu at gmail.com
                CC: llvmbugs at cs.uiuc.edu


The following crashes on the last line "o4->refineAbstractTypeTo(h2->get());"

#define __STDC_LIMIT_MACROS
#define __STDC_CONSTANT_MACROS

#include <stdio.h>
#include <vector>
#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Type.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Constants.h"
#include "llvm/GlobalValue.h"

using namespace llvm;
using namespace std;

int main (int argc, const char * argv[]) {
    LLVMContext * ctx;
    StringRef * name;
    Module * m;
    vector <Type *> * t1;
    vector <Constant *> * v1;
    OpaqueType * o1;
    OpaqueType * o2;
    PointerType * p1;
    PointerType * p2;
    StructType * s1;
    PATypeHolder * h1;
    vector <Type *> * t2;
    vector <Constant *> * v2;
    OpaqueType * o3;
    OpaqueType * o4;
    PointerType * p3;
    PointerType * p4;
    Constant * c;
    StructType * s2;
    PATypeHolder * h2;

    ctx = new LLVMContext;
    name = new StringRef ("test");
    m = new Module (*name, *ctx);

    t1 = new vector <Type *>;
    v1 = new vector <Constant *>;
    o1 = OpaqueType::get(*ctx);
    p1 = PointerType::get(o1, 0);
    t1->push_back ((IntegerType *)IntegerType::get(*ctx, 32));
    v1->push_back (ConstantInt::get(IntegerType::get(*ctx, 32), 14));
    t1->push_back (p1);
    v1->push_back (ConstantPointerNull::get(p1));
    o2 = OpaqueType::get (*ctx);
    p2 = PointerType::get (o2, 0);
    t1->push_back (p2);
    v1->push_back (ConstantPointerNull::get (p2));
    s1 = StructType::get (*ctx, *((const vector <const Type *> *) t1));
    h1 = new PATypeHolder (s1);
    o1->refineAbstractTypeTo(h1->get());
    o2->refineAbstractTypeTo(h1->get());


    t2 = new vector <Type *>;
    v2 = new vector <Constant *>;
    o3 = OpaqueType::get(*ctx);
    p3 = PointerType::get(o3, 0);
    t2->push_back ((IntegerType *)IntegerType::get(*ctx, 32));
    v2->push_back (ConstantInt::get(IntegerType::get(*ctx, 32), 14));
    t2->push_back (p3);
    v2->push_back (ConstantPointerNull::get(p3));
    o4 = OpaqueType::get (*ctx);
    p4 = PointerType::get (o4, 0);
    t2->push_back (p4);
    v2->push_back (ConstantPointerNull::get (p4));
    c = ConstantStruct::get(*ctx, *v2, false);
    s2 = StructType::get (*ctx, *((const vector <const Type *> *) t2));
    h2 = new PATypeHolder (s2);
    o3->refineAbstractTypeTo(h2->get());
    o4->refineAbstractTypeTo(h2->get());
}

the call stack is:

#0    0x1000d56fa in llvm::Value::getValueID at Value.h:247
#1    0x1000366c9 in llvm::isa_impl<llvm::Constant, llvm::Value> at Value.h:329
#2    0x10003994f in llvm::isa_impl_wrap<llvm::Constant, llvm::Value const,
llvm::Value const>::doit at Casting.h:71
#3    0x100039969 in llvm::isa_impl_cl<llvm::Value>::isa<llvm::Constant> at
Casting.h:83
#4    0x100039983 in llvm::isa_impl_cl<llvm::Value*>::isa<llvm::Constant> at
Casting.h:101
#5    0x10002a780 in llvm::isa_impl_cl<llvm::Value* const>::isa<llvm::Constant>
at Casting.h:92
#6    0x10003a938 in llvm::isa_impl_wrap<llvm::Constant, llvm::Use const,
llvm::Value*>::doit at Casting.h:63
#7    0x10002a79b in llvm::isa_impl_cl<llvm::Use>::isa<llvm::Constant> at
Casting.h:83
#8    0x10002a7b5 in llvm::isa<llvm::Constant, llvm::Use> at Casting.h:116
#9    0x100041c1f in llvm::cast<llvm::Constant, llvm::Use> at Casting.h:200
#10    0x10004211f in llvm::ConstantStruct::getOperand at Constants.h:460
#11    0x1000ab348 in llvm::ConstantKeyData<llvm::ConstantStruct>::getValType
at ConstantsContext.h:475
#12    0x1000ac5f1 in llvm::ConstantUniqueMap<std::vector<llvm::Constant*,
std::allocator<llvm::Constant*> >, llvm::StructType, llvm::ConstantStruct,
true>::refineAbstractType at ConstantsContext.h:741
#13    0x1000d52eb in llvm::DerivedType::unlockedRefineAbstractTypeTo at
Type.cpp:1175
#14    0x1000e62fe in llvm::TypeMap<llvm::StructValType,
llvm::StructType>::RefineAbstractType at TypesContext.h:409
#15    0x1000d5454 in llvm::StructType::refineAbstractType at Type.cpp:1267
#16    0x1000d52eb in llvm::DerivedType::unlockedRefineAbstractTypeTo at
Type.cpp:1175
#17    0x1000e55c5 in llvm::TypeMap<llvm::PointerValType,
llvm::PointerType>::RefineAbstractType at TypesContext.h:409
#18    0x1000d53d0 in llvm::PointerType::refineAbstractType at Type.cpp:1297
#19    0x1000d52eb in llvm::DerivedType::unlockedRefineAbstractTypeTo at
Type.cpp:1175
#20    0x1000d5539 in llvm::DerivedType::refineAbstractTypeTo at Type.cpp:1193
#21    0x100008158 in main at main.cpp:76

inside llvm::Value::getValueId the value of this is 0x0.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list