From owner-svn-ports-all@FreeBSD.ORG Sun Jan 12 17:19:00 2014 Return-Path: Delivered-To: svn-ports-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 8958C9D1; Sun, 12 Jan 2014 17:19:00 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 73FE01140; Sun, 12 Jan 2014 17:19:00 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id s0CHJ0lW022466; Sun, 12 Jan 2014 17:19:00 GMT (envelope-from rene@svn.freebsd.org) Received: (from rene@localhost) by svn.freebsd.org (8.14.7/8.14.7/Submit) id s0CHJ0wl022463; Sun, 12 Jan 2014 17:19:00 GMT (envelope-from rene@svn.freebsd.org) Message-Id: <201401121719.s0CHJ0wl022463@svn.freebsd.org> From: Rene Ladan Date: Sun, 12 Jan 2014 17:19:00 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r339524 - in head/lang/clay: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Jan 2014 17:19:00 -0000 Author: rene Date: Sun Jan 12 17:18:59 2014 New Revision: 339524 URL: http://svnweb.freebsd.org/changeset/ports/339524 Log: - Adjust LLVM dependency from 3.1 to 3.2 [1] - Do not enable BINDGEN option by default, it brekas the build on 10.0 + - Bump PORTREVISION [1] - Add stage support - Use option helpers - Adjust license, COMMENT PR: ports/182497 [1] Submitted by: Jyun-Yan You (maintainer) Added: head/lang/clay/files/ head/lang/clay/files/patch-llvm32 (contents, props changed) Modified: head/lang/clay/Makefile Modified: head/lang/clay/Makefile ============================================================================== --- head/lang/clay/Makefile Sun Jan 12 16:59:50 2014 (r339523) +++ head/lang/clay/Makefile Sun Jan 12 17:18:59 2014 (r339524) @@ -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 +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 +.include Added: head/lang/clay/files/patch-llvm32 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lang/clay/files/patch-llvm32 Sun Jan 12 17:18:59 2014 (r339524) @@ -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 +-#include +-#include + #include + #include + #include +@@ -36,12 +34,16 @@ + #include + #include + #include ++#include ++#include + #include ++#include + #include + #include + #include + #include + #include ++#include + #include + #include + #include +@@ -50,7 +52,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -59,7 +60,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -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 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 > &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 llWordTypes; + vector::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 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 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 > 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(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(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(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;