diff options
-rw-r--r-- | lang/clay/Makefile | 42 | ||||
-rw-r--r-- | lang/clay/files/patch-llvm32 | 508 |
2 files changed, 521 insertions, 29 deletions
diff --git a/lang/clay/Makefile b/lang/clay/Makefile index f036191a91da..3c8a24eb7334 100644 --- a/lang/clay/Makefile +++ b/lang/clay/Makefile @@ -3,22 +3,25 @@ PORTNAME= clay PORTVERSION= 0.1.2 +PORTREVISION= 1 CATEGORIES= lang MASTER_SITES= https://github.com/jckarter/${PORTNAME}/tarball/v${PORTVERSION}/ DISTNAME= jckarter-${PORTNAME}-v${PORTVERSION}-0-g${GITVERSION} MAINTAINER= jyyou@cs.nctu.edu.tw -COMMENT= A language designed for generic programming +COMMENT= Language designed for generic programming -LICENSE= BSD +LICENSE= BSD2CLAUSE -BUILD_DEPENDS= llvm31>=3.1:${PORTSDIR}/devel/llvm31 +BUILD_DEPENDS= llvm-config32:${PORTSDIR}/devel/llvm32 \ + clang32:${PORTSDIR}/lang/clang32 +RUN_DEPENDS= clang32:${PORTSDIR}/lang/clang32 OPTIONS_DEFINE= BINDGEN -BINDGEN_DESC= Build with binding generator -OPTIONS_DEFAULT= BINDGEN +BINDGEN_DESC= Build with binding generator (broken on 10.0+) GITVERSION= 751ebe3 +PATCH_STRIP= -p1 WRKSRC= ${WRKDIR}/jckarter-${PORTNAME}-${GITVERSION} ONLY_FOR_ARCHS= i386 amd64 @@ -26,29 +29,10 @@ ONLY_FOR_ARCHS= i386 amd64 USES= cmake CMAKE_ARGS+= -G "Unix Makefiles" -DBUILD_FIX=false -CC= clang -CXX= clang++ +CC= clang32 +CXX= clang++32 -NO_STAGE= yes -.include <bsd.port.pre.mk> +OPTIONS_SUB= yes +BINDGEN_CMAKE_OFF= -DBUILD_BINDGEN=false -.if ${PORT_OPTIONS:MBINDGEN} -PLIST_SUB+= BINDGEN="" -.else -PLIST_SUB+= BINDGEN="@comment " -CMAKE_ARGS+= -DBUILD_BINDGEN=false -.endif - -.if ${OSVERSION} < 900044 || ${PORT_OPTIONS:MBINDGEN} -BUILD_DEPENDS+= clang31>=3.1:${PORTSDIR}/lang/clang31 -RUN_DEPENDS+= clang31>=3.1:${PORTSDIR}/lang/clang31 -.endif - -.if defined(NOPORTDOCS) -pre-configure: - ${REINPLACE_CMD} \ - -e 's|install(DIRECTORY doc/ DESTINATION share/doc/clay)||' \ - ${WRKSRC}/CMakeLists.txt -.endif - -.include <bsd.port.post.mk> +.include <bsd.port.mk> diff --git a/lang/clay/files/patch-llvm32 b/lang/clay/files/patch-llvm32 new file mode 100644 index 000000000000..ffa37a3f06f5 --- /dev/null +++ b/lang/clay/files/patch-llvm32 @@ -0,0 +1,508 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 89930e5..99ef0cc 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -15,16 +15,16 @@ + if(UNIX) + set(LLVM_DIR "/usr/local" CACHE PATH "llvm install path") + +- find_program(LLVM_CONFIG llvm-config ${LLVM_DIR}/bin +- DOC "path to llvm-config") ++ find_program(LLVM_CONFIG llvm-config32 ${LLVM_DIR}/bin ++ DOC "path to llvm-config32") + + execute_process( + COMMAND ${LLVM_CONFIG} --version + OUTPUT_VARIABLE LLVM_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +- if(NOT ${LLVM_VERSION} STREQUAL "3.1") +- message(FATAL_ERROR "Clay requires LLVM 3.1.") ++ if(NOT ${LLVM_VERSION} STREQUAL "3.2") ++ message(FATAL_ERROR "Clay requires LLVM 3.2.") + endif() + + execute_process( +diff --git a/README.txt b/README.txt +index 855a4ab..7999b24 100644 +--- a/README.txt ++++ b/README.txt +@@ -9,7 +9,7 @@ Visit http://claylabs.com/clay for more information. + Pre-requisites + -------------- + +-Clay requires LLVM 3.1, Clang 3.1, and CMake version 2.6 or later. ++Clay requires LLVM 3.2, Clang 3.2, and CMake version 2.6 or later. + + CMake Configuration + ------------------- +@@ -20,7 +20,7 @@ be customized by passing cmake arguments of the form + CMake variables such as CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE, Clay's + build system uses the following variables: + +-* LLVM_DIR can be set to the install prefix of an LLVM 3.1 installation. ++* LLVM_DIR can be set to the install prefix of an LLVM 3.2 installation. + If not set, CMake will look for an 'llvm-config' script on the PATH. + * PYTHON_EXECUTABLE can be set to the path of a Python 2.x interpreter. + Clay uses a Python 2 script to drive its test suite. Some platforms +@@ -70,7 +70,7 @@ and the MSVC compiler. There are some issues with Debug builds and + LLVM, so both LLVM and Clay will need to be built as Release. The + default LLVM install directory needs Administrator permissions, so + you may want to set a CMAKE_INSTALL_PREFIX as well. to change it. +-Place the Clang repository in llvm-3.1/tools/clang so that LLVM builds ++Place the Clang repository in llvm-3.2/tools/clang so that LLVM builds + it automatically and compile LLVM with the following commands: + + mkdir build +diff --git a/compiler/src/clay.hpp b/compiler/src/clay.hpp +index 339b262..2c95623 100644 +--- a/compiler/src/clay.hpp ++++ b/compiler/src/clay.hpp +@@ -27,8 +27,6 @@ + #endif + + #include <llvm/ADT/Triple.h> +-#include <llvm/Analysis/DebugInfo.h> +-#include <llvm/Analysis/DIBuilder.h> + #include <llvm/Assembly/Writer.h> + #include <llvm/Assembly/Parser.h> + #include <llvm/Assembly/PrintModulePass.h> +@@ -36,12 +34,16 @@ + #include <llvm/Bitcode/ReaderWriter.h> + #include <llvm/CodeGen/LinkAllAsmWriterComponents.h> + #include <llvm/CodeGen/LinkAllCodegenComponents.h> ++#include <llvm/DataLayout.h> ++#include <llvm/DebugInfo.h> + #include <llvm/DerivedTypes.h> ++#include <llvm/DIBuilder.h> + #include <llvm/ExecutionEngine/ExecutionEngine.h> + #include <llvm/ExecutionEngine/GenericValue.h> + #include <llvm/ExecutionEngine/JIT.h> + #include <llvm/Function.h> + #include <llvm/Intrinsics.h> ++#include <llvm/IRBuilder.h> + #include <llvm/LinkAllVMCore.h> + #include <llvm/LLVMContext.h> + #include <llvm/Module.h> +@@ -50,7 +52,6 @@ + #include <llvm/Support/FileSystem.h> + #include <llvm/Support/FormattedStream.h> + #include <llvm/Support/Host.h> +-#include <llvm/Support/IRBuilder.h> + #include <llvm/Support/MemoryBuffer.h> + #include <llvm/Support/Path.h> + #include <llvm/Support/PathV2.h> +@@ -59,7 +60,6 @@ + #include <llvm/Support/TargetSelect.h> + #include <llvm/Support/TargetSelect.h> + #include <llvm/Support/raw_ostream.h> +-#include <llvm/Target/TargetData.h> + #include <llvm/Target/TargetOptions.h> + #include <llvm/Transforms/IPO/PassManagerBuilder.h> + #include <llvm/Transforms/IPO.h> +@@ -3450,7 +3450,7 @@ static const unsigned short DW_LANG_user_CLAY = 0xC1A4; + + extern llvm::Module *llvmModule; + extern llvm::DIBuilder *llvmDIBuilder; +-extern const llvm::TargetData *llvmTargetData; ++extern const llvm::DataLayout *llvmDataLayout; + + llvm::PointerType *exceptionReturnType(); + llvm::Value *noExceptionReturnValue(); +diff --git a/compiler/src/codegen.cpp b/compiler/src/codegen.cpp +index f6ed737..1fb574e 100644 +--- a/compiler/src/codegen.cpp ++++ b/compiler/src/codegen.cpp +@@ -5,7 +5,7 @@ namespace clay { + llvm::Module *llvmModule = NULL; + llvm::DIBuilder *llvmDIBuilder = NULL; + llvm::ExecutionEngine *llvmEngine; +-const llvm::TargetData *llvmTargetData; ++const llvm::DataLayout *llvmDataLayout; + + static vector<CValuePtr> initializedGlobals; + static CodegenContextPtr constructorsCtx; +@@ -2886,7 +2886,10 @@ void codegenCodeBody(InvokeEntryPtr entry) + llvmModule); + + for (unsigned i = 1; i <= llArgTypes.size(); ++i) { +- llFunc->addAttribute(i, llvm::Attribute::NoAlias); ++ llvm::Attributes attrs = llvm::Attributes::get( ++ llFunc->getContext(), ++ llvm::Attributes::NoAlias); ++ llFunc->addAttribute(i, attrs); + } + + entry->llvmFunc = llFunc; +@@ -2903,15 +2906,22 @@ void codegenCodeBody(InvokeEntryPtr entry) + for (unsigned i = 0; i < entry->argsKey.size(); ++i) { + llvm::DIType argType = llvmTypeDebugInfo(entry->argsKey[i]); + llvm::DIType argRefType +- = llvmDIBuilder->createReferenceType(argType); ++ = llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, ++ argType); + debugParamTypes.push_back(argRefType); + } + for (unsigned i = 0; i < entry->returnTypes.size(); ++i) { + llvm::DIType returnType = llvmTypeDebugInfo(entry->returnTypes[i]); + llvm::DIType returnRefType = entry->returnIsRef[i] + ? llvmDIBuilder->createReferenceType( +- llvmDIBuilder->createReferenceType(returnType)) +- : llvmDIBuilder->createReferenceType(returnType); ++ llvm::dwarf::DW_TAG_reference_type, ++ llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, ++ returnType)) ++ : llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, ++ returnType); + + debugParamTypes.push_back(returnRefType); + } +@@ -2983,6 +2993,7 @@ void codegenCodeBody(InvokeEntryPtr entry) + file, // file + line, // line + llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, + llvmTypeDebugInfo(entry->fixedArgTypes[i])), // type + true, // alwaysPreserve + 0, // flags +@@ -3025,6 +3036,7 @@ void codegenCodeBody(InvokeEntryPtr entry) + file, // file + line, // line + llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, + llvmTypeDebugInfo(entry->varArgTypes[i])), // type + true, // alwaysPreserve + 0, // flags +@@ -3084,6 +3096,7 @@ void codegenCodeBody(InvokeEntryPtr entry) + file, // file + line, // line + llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, + llvmTypeDebugInfo(returns[i].type)), // type + true, // alwaysPreserve + 0, // flags +@@ -4076,6 +4089,7 @@ EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContextPtr ctx) + file, // file + line, // line + llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, + llvmTypeDebugInfo(pv->type)), // type + true, // alwaysPreserve + 0, // flags +@@ -4133,6 +4147,7 @@ EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContextPtr ctx) + pv->isTemp + ? llvmTypeDebugInfo(pv->type) + : llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, + llvmTypeDebugInfo(pv->type)), // type + true, // alwaysPreserve + 0, // flags +@@ -6464,8 +6479,8 @@ llvm::TargetMachine *initLLVM(std::string const &targetTriple, + targetTriple, "", "", llvm::TargetOptions(), reloc, codeModel); + + if (targetMachine != NULL) { +- llvmTargetData = targetMachine->getTargetData(); +- llvmModule->setDataLayout(llvmTargetData->getStringRepresentation()); ++ llvmDataLayout = targetMachine->getDataLayout(); ++ llvmModule->setDataLayout(llvmDataLayout->getStringRepresentation()); + } + + return targetMachine; +diff --git a/compiler/src/externals.cpp b/compiler/src/externals.cpp +index f7cd333..ba43797 100644 +--- a/compiler/src/externals.cpp ++++ b/compiler/src/externals.cpp +@@ -23,11 +23,12 @@ static llvm::Value *promoteCVarArg(CallingConv conv, + } + case FLOAT_TYPE : { + FloatType *ft = (FloatType *)t.ptr(); +- if (ft->bits == 32) ++ if (ft->bits == 32) { + if(ft->isImaginary) + return ctx->builder->CreateFPExt(llv, llvmType(imag64Type)); + else + return ctx->builder->CreateFPExt(llv, llvmType(float64Type)); ++ } + return llv; + } + default : +@@ -43,8 +44,12 @@ llvm::Type *ExternalTarget::pushReturnType(CallingConv conv, + if (type == NULL) + return llvmVoidType(); + else if (typeReturnsBySretPointer(conv, type)) { +- llArgTypes.push_back(llvmPointerType(type)); +- llAttributes.push_back(make_pair(llArgTypes.size(), llvm::Attribute::StructRet)); ++ llvm::Type *llType = llvmPointerType(type); ++ llArgTypes.push_back(llType); ++ llvm::Attributes attrs = llvm::Attributes::get( ++ llType->getContext(), ++ llvm::Attributes::StructRet); ++ llAttributes.push_back(make_pair(llArgTypes.size(), attrs)); + return llvmVoidType(); + } else { + llvm::Type *bitcastType = typeReturnsAsBitcastType(conv, type); +@@ -61,8 +66,12 @@ void ExternalTarget::pushArgumentType(CallingConv conv, + vector< pair<unsigned, llvm::Attributes> > &llAttributes) + { + if (typePassesByByvalPointer(conv, type, false)) { +- llArgTypes.push_back(llvmPointerType(type)); +- llAttributes.push_back(make_pair(llArgTypes.size(), llvm::Attribute::ByVal)); ++ llvm::Type *llType = llvmPointerType(type); ++ llArgTypes.push_back(llType); ++ llvm::Attributes attrs = llvm::Attributes::get( ++ llType->getContext(), ++ llvm::Attributes::ByVal); ++ llAttributes.push_back(make_pair(llArgTypes.size(), attrs)); + } else { + llvm::Type *bitcastType = typePassesAsBitcastType(conv, type, false); + if (bitcastType != NULL) +@@ -171,7 +180,10 @@ void ExternalTarget::loadStructRetArgument(CallingConv conv, + CValuePtr out0 = out->values[0]; + assert(out0->type == type); + llArgs.push_back(out0->llValue); +- llAttributes.push_back(make_pair(llArgs.size(), llvm::Attribute::StructRet)); ++ llvm::Attributes attrs = llvm::Attributes::get( ++ out0->llValue->getContext(), ++ llvm::Attributes::StructRet); ++ llAttributes.push_back(make_pair(llArgs.size(), attrs)); + } + } + +@@ -183,7 +195,10 @@ void ExternalTarget::loadArgument(CallingConv conv, + { + if (typePassesByByvalPointer(conv, cv->type, false)) { + llArgs.push_back(cv->llValue); +- llAttributes.push_back(make_pair(llArgs.size(), llvm::Attribute::ByVal)); ++ llvm::Attributes attrs = llvm::Attributes::get( ++ cv->llValue->getContext(), ++ llvm::Attributes::ByVal); ++ llAttributes.push_back(make_pair(llArgs.size(), attrs)); + } else { + llvm::Type *bitcastType = typePassesAsBitcastType(conv, cv->type, false); + if (bitcastType != NULL) { +@@ -206,7 +221,10 @@ void ExternalTarget::loadVarArgument(CallingConv conv, + { + if (typePassesByByvalPointer(conv, cv->type, true)) { + llArgs.push_back(cv->llValue); +- llAttributes.push_back(make_pair(llArgs.size(), llvm::Attribute::ByVal)); ++ llvm::Attributes attrs = llvm::Attributes::get( ++ cv->llValue->getContext(), ++ llvm::Attributes::ByVal); ++ llAttributes.push_back(make_pair(llArgs.size(), attrs)); + } else { + llvm::Type *bitcastType = typePassesAsBitcastType(conv, cv->type, true); + if (bitcastType != NULL) { +@@ -845,21 +863,26 @@ llvm::Type *X86_64_ExternalTarget::llvmWordType(TypePtr type) + llvm::StructType *llType = llvm::StructType::create(llvm::getGlobalContext(), "x86-64 " + typeName(type)); + vector<llvm::Type*> llWordTypes; + vector<WordClass>::const_iterator i = wordClasses.begin(); ++ size_t size = typeSize(type); + while (i != wordClasses.end()) { ++ assert(size > 0); + switch (*i) { + // docs don't cover this case. is it possible? + // e.g. struct { __m128 a; __m256 b; }; + case NO_CLASS: + assert(false); + break; +- case INTEGER: +- llWordTypes.push_back(llvmIntType(64)); ++ case INTEGER: { ++ size_t wordSize = size >= 8 ? 64 : size*8; ++ llWordTypes.push_back(llvmIntType(wordSize)); + ++i; + break; ++ } + case SSE_INT_VECTOR: { + int vectorRun = 0; + do { ++vectorRun; ++i; } while (i != wordClasses.end() && *i == SSEUP); +- // 8-byte int vectors are allocated to MMX registers ++ // 8-byte int vectors are allocated to MMX registers, so always generate ++ // a <float x n> vector for 64-bit SSE words. + if (vectorRun == 1) + llWordTypes.push_back(llvm::VectorType::get(llvmFloatType(64), vectorRun)); + else +@@ -913,6 +936,8 @@ llvm::Type *X86_64_ExternalTarget::llvmWordType(TypePtr type) + assert(false); + break; + } ++ assert(size >= 8 || i == wordClasses.end()); ++ size -= 8; + } + llType->setBody(llWordTypes); + return llType; +diff --git a/compiler/src/loader.cpp b/compiler/src/loader.cpp +index cd90f58..78b6a18 100644 +--- a/compiler/src/loader.cpp ++++ b/compiler/src/loader.cpp +@@ -70,8 +70,8 @@ static std::string getCPU(llvm::Triple const &triple) { + } + } + +-static std::string getPtrSize(const llvm::TargetData *targetData) { +- switch (targetData->getPointerSizeInBits()) { ++static std::string getPtrSize(const llvm::DataLayout *dataLayout) { ++ switch (dataLayout->getPointerSizeInBits()) { + case 32 : return "32"; + case 64 : return "64"; + default : assert(false); return ""; +@@ -84,7 +84,7 @@ static void initModuleSuffixes() { + string os = getOS(triple); + string osgroup = getOSGroup(triple); + string cpu = getCPU(triple); +- string bits = getPtrSize(llvmTargetData); ++ string bits = getPtrSize(llvmDataLayout); + moduleSuffixes.push_back("." + os + "." + cpu + "." + bits + ".clay"); + moduleSuffixes.push_back("." + os + "." + cpu + ".clay"); + moduleSuffixes.push_back("." + os + "." + bits + ".clay"); +diff --git a/compiler/src/main.cpp b/compiler/src/main.cpp +index f2fbd85..a24c20f 100644 +--- a/compiler/src/main.cpp ++++ b/compiler/src/main.cpp +@@ -72,12 +72,12 @@ + llvm::PassManager passes; + + string moduleDataLayout = module->getDataLayout(); +- llvm::TargetData *td = new llvm::TargetData(moduleDataLayout); +- passes.add(td); ++ llvm::DataLayout *dl = new llvm::DataLayout(moduleDataLayout); ++ passes.add(dl); + + llvm::FunctionPassManager fpasses(module); + +- fpasses.add(new llvm::TargetData(*td)); ++ fpasses.add(new llvm::DataLayout(*dl)); + + addOptimizationPasses(passes, fpasses, optLevel, internalize); + +@@ -116,7 +116,7 @@ + + llvm::FunctionPassManager fpasses(module); + +- fpasses.add(new llvm::TargetData(module)); ++ fpasses.add(new llvm::DataLayout(module)); + fpasses.add(llvm::createVerifierPass()); + + targetMachine->setAsmVerbosityDefault(true); +@@ -180,7 +180,7 @@ + vector<const char *> clangArgs; + clangArgs.push_back(clangPath.c_str()); + +- switch (llvmTargetData->getPointerSizeInBits()) { ++ switch (llvmDataLayout->getPointerSizeInBits()) { + case 32 : + clangArgs.push_back("-m32"); + break; +@@ -943,7 +943,7 @@ + clangPath = llvm::sys::Path(); + #endif + if (!clangPath.isValid()) { +- clangPath = llvm::sys::Program::FindProgramByName("clang"); ++ clangPath = llvm::sys::Program::FindProgramByName("clang32"); + } + if (!clangPath.isValid()) { + cerr << "error: unable to find clang on the path\n"; +diff --git a/compiler/src/types.cpp b/compiler/src/types.cpp +index 8f86faa..6990a15 100644 +--- a/compiler/src/types.cpp ++++ b/compiler/src/types.cpp +@@ -43,11 +43,11 @@ static vector<vector<StaticTypePtr> > staticTypes; + // + + static size_t llTypeSize(llvm::Type *llt) { +- return (size_t)llvmTargetData->getTypeAllocSize(llt); ++ return (size_t)llvmDataLayout->getTypeAllocSize(llt); + } + + static size_t llTypeAlignment(llvm::Type *llt) { +- return (size_t)llvmTargetData->getABITypeAlignment(llt); ++ return (size_t)llvmDataLayout->getABITypeAlignment(llt); + } + + static size_t debugTypeSize(llvm::Type *llt) { +@@ -81,7 +81,7 @@ void initTypes() { + complex80Type = new ComplexType(80); + + cIntType = int32Type; +- switch (llvmTargetData->getPointerSizeInBits()) { ++ switch (llvmDataLayout->getPointerSizeInBits()) { + case 32 : + cSizeTType = uint32Type; + cPtrDiffTType = int32Type; +@@ -826,7 +826,7 @@ const llvm::StructLayout *tupleTypeLayout(TupleType *t) { + if (t->layout == NULL) { + llvm::StructType *st = + llvm::cast<llvm::StructType>(llvmType(t)); +- t->layout = llvmTargetData->getStructLayout(st); ++ t->layout = llvmDataLayout->getStructLayout(st); + } + return t->layout; + } +@@ -835,7 +835,7 @@ const llvm::StructLayout *complexTypeLayout(ComplexType *t) { + if (t->layout == NULL) { + llvm::StructType *st = + llvm::cast<llvm::StructType>(llvmType(t)); +- t->layout = llvmTargetData->getStructLayout(st); ++ t->layout = llvmDataLayout->getStructLayout(st); + } + return t->layout; + } +@@ -844,7 +844,7 @@ const llvm::StructLayout *recordTypeLayout(RecordType *t) { + if (t->layout == NULL) { + llvm::StructType *st = + llvm::cast<llvm::StructType>(llvmType(t)); +- t->layout = llvmTargetData->getStructLayout(st); ++ t->layout = llvmDataLayout->getStructLayout(st); + } + return t->layout; + } +@@ -1101,15 +1101,22 @@ static void declareLLVMType(TypePtr t) { + for (unsigned i = 0; i < x->argTypes.size(); ++i) { + llvm::DIType argType = llvmTypeDebugInfo(x->argTypes[i]); + llvm::DIType argRefType +- = llvmDIBuilder->createReferenceType(argType); ++ = llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, ++ argType); + debugParamTypes.push_back(argRefType); + } + for (unsigned i = 0; i < x->returnTypes.size(); ++i) { + llvm::DIType returnType = llvmTypeDebugInfo(x->returnTypes[i]); + llvm::DIType returnRefType = x->returnIsRef[i] + ? llvmDIBuilder->createReferenceType( +- llvmDIBuilder->createReferenceType(returnType)) +- : llvmDIBuilder->createReferenceType(returnType); ++ llvm::dwarf::DW_TAG_reference_type, ++ llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, ++ returnType)) ++ : llvmDIBuilder->createReferenceType( ++ llvm::dwarf::DW_TAG_reference_type, ++ returnType); + + debugParamTypes.push_back(returnRefType); + } +@@ -1259,7 +1266,8 @@ static void declareLLVMType(TypePtr t) { + line, + debugTypeSize(t->llType), + debugTypeAlignment(t->llType), +- enumArray); ++ enumArray, ++ llvm::DIType()); + } + break; + } +@@ -1358,8 +1366,8 @@ static void defineLLVMType(TypePtr t) { + size_t maxSize = 0; + for (unsigned i = 0; i < x->memberTypes.size(); ++i) { + llvm::Type *llt = llvmType(x->memberTypes[i]); +- size_t align = (size_t)llvmTargetData->getABITypeAlignment(llt); +- size_t size = (size_t)llvmTargetData->getTypeAllocSize(llt); ++ size_t align = (size_t)llvmDataLayout->getABITypeAlignment(llt); ++ size_t size = (size_t)llvmDataLayout->getTypeAllocSize(llt); + if (align > maxAlign) { + maxAlign = align; + maxAlignType = llt; |