llvm30 stable port information

Package: llvm30
Version: 3.0
Revision: 1
Description: Modular and reusable compiler
Distribution: 10.5, 10.6
License: BSD
Maintainer: David Fang

# need bash because /bin/sh 2.0 on darwin8 is missing support for pipefail
# ccache is only temporary, for accelerating rebuilds
BuildDepends: cmake (>= 2.8.2-1), fink (>= 0.28)
InfoTest: <<
# coreutils for gtimeout for tests
TestDepends: coreutils
TestScript: <<
#!/bin/sh -ev
# need path to bootstrapping compiler
pushd ../opt-bin
export PATH=`pwd`:$PATH
popd
cd ../build/last
# echo "******** Running included LLVM and clang tests ... ********"
make -k TESTARGS=-v check-all || :
<<
TestSuiteSize: medium
<<

Source: http://llvm.org/releases/%v/llvm-%v.tar.gz
Source-MD5: a8e5f5f1c1adebae7b4a654c376a6005
Source2: http://llvm.org/releases/%v/clang-%v.tar.gz
Source2-MD5: 43350706ae6cf05d0068885792ea0591
# libcxxabi is not recommended, lib++ is not ready yet
# SourceN: http://llvm.org/releases/%v/test-suite-%v.tar.gz
# SourceN-MD5: 36f72e2a932727fb86338e5939da5eaf

SourceDirectory: llvm-%v.src
BuildDependsOnly: false
UseMaxBuildJobs: true

PatchFile: %n.patch
PatchFile-MD5: c7f58f6db846bb8ab4fde81291dd3da7
PatchScript: <<
#!/bin/sh -ev
# relocated a few auxiliary directories where they are expected
pushd tools
ln -s ../../clang-%v.src ./clang
popd
# mv ../test-suite-%v.src projects/test-suite
%{default_script}
pushd ..
popd
# point hard-coded paths to system g++-4.0.1's C++ includes
# remove references to g++-4.2.1, never existed in Xcode 2.5
darwin_vers=`uname -r | cut -d. -f1`
if test "$darwin_vers" != 10
then sed -i.orig -e "s|darwin10|darwin$darwin_vers|g" \
tools/clang/lib/Frontend/InitHeaderSearch.cpp
fi
if test ! -d /usr/include/c++/4.0.0
then sed -i.orig2 -e '/GnuCPlusPlusInclude.*4\.0\.0/,/);/d' \
tools/clang/lib/Frontend/InitHeaderSearch.cpp
fi
if test ! -d /usr/include/c++/4.2.1
then sed -i.orig2 -e '/GnuCPlusPlusInclude.*4\.2\.1/,/);/d' \
tools/clang/lib/Frontend/InitHeaderSearch.cpp
fi
# some libs failed to explicitly list their dependencies, so we append
cp utils/unittest/CMakeLists.txt{,.orig}
{ echo "add_llvm_library_dependencies(gtest LLVMSupport)" ; \
echo "add_llvm_library_dependencies(gtest_main gtest)" ; \
} >> utils/unittest/CMakeLists.txt
cp tools/clang/lib/Serialization/CMakeLists.txt{,.orig}
{ echo "add_llvm_library_dependencies(clangSerialization clangAST clangBasic clangSema LLVMSupport)" ; \
} >> tools/clang/lib/Serialization/CMakeLists.txt
# ld warning about binding of _abort and _raise symbols vs. libSystem's
# suggests -bind_at_load
# cp lib/Support/CMakeLists.txt{,.orig}
# echo "SET_TARGET_PROPERTIES(LLVMSupport PROPERTIES LINK_FLAGS -Wl,-bind_at_load)" >> lib/Support/CMakeLists.txt
# circular dependence between clangSerialization and clangFrontend
# to resolve, lump all of Serialization into Frontend
pushd tools/clang/lib/Frontend
ln -s ../Serialization/*.cpp .
ln -s ../Serialization/*.h .
ser_files=`ls ../Serialization/*.cpp | xargs basename | tr '\n' ' '`
echo "linking: $ser_files"
sed -i.orig -e '/clangSerialization/d' \
-e "s|Warnings\.cpp|& $ser_files|" CMakeLists.txt
popd
# purge refs to clangSerialization (that already have clangFrontend)
for d in tools/clang/{tools/{driver,libclang},examples/{wpa,clang-interpreter}}
do sed -i.orig -e '/clangSerialization/d' $d/CMakeLists.txt
done
# needed for gcc-4.6 only
# sed -i.orig2 -e 's|compatibility_version|dylib_&|' tools/clang/tools/libclang/CMakeLists.txt
# JIT needs CodeGen, duh.
sed -i.orig -e 's|LLVMCore|LLVMCodeGen &|' lib/ExecutionEngine/JIT/CMakeLists.txt
# clang analyzers
sed -i.orig -e '/LLVM_USED_LIBS/s|)| clangAnalysis clangStaticAnalyzerCore)|' tools/clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
sed -i.orig -e '/LLVM_USED_LIBS/s|)| clangStaticAnalyzerCheckers clangStaticAnalyzerCore)|' tools/clang/lib/StaticAnalyzer/Frontend/CMakeLists.txt
# test suite requires newer bash than /bin/bash 2.0 for pipefail
# test the pipefail option of this shell first
set -o pipefail || {
sed -i.orig -e "/bashPath = None/s|None|'%p/bin/bash'|" utils/lit/lit/LitConfig.py
test -x %p/bin/bash || { echo "Error: Fink-built bash >= 3.0 required!" ; exit 1; }
}
# force time limit per test (prefix each command-line)
sed -i.orig -e "/script\.append/s|ln|'gtimeout 5m '+&|" utils/lit/lit/TestRunner.py
# projects/test-suite expects built llvm/clang to have been configured
# but sadly, we used cmake; don't include $llvmobjdir/Makefile.config
# TODO: replace cmake build with autoconf'd build
# sed -i.orig -e 's|HAS_LLVM := 1|HAS_LLVM := 0|' projects/test-suite/Makefile.config.in
<<
CompileScript: <<
#!/bin/sh -ev
# just always build these archs
CMAKE_OPTIONS="-DLLVM_TARGETS_TO_BUILD=X86;PowerPC;ARM"

# automatically use ccache if detected
# comment-out if ccache is not desired
test -x $p/bin/ccache && ccache=ccache || ccache=

# set up some possible bootstrapping compilers
# wrap ccache into single cmd b/c cmake can't handle "ccache g++"
mkdir ../opt-bin
pushd ../opt-bin
{ echo "#!/bin/sh" ; echo 'exec $ccache gcc "$@"' ; } > ccgcc
{ echo "#!/bin/sh" ; echo 'exec $ccache g++ "$@"' ; } > ccg++
{ echo "#!/bin/sh" ; echo 'exec $ccache gcc-4.2 "$@"' ; } > ccgcc-4.2
{ echo "#!/bin/sh" ; echo 'exec $ccache g++-4.2 "$@"' ; } > ccg++-4.2
# { echo "#!/bin/sh" ; echo 'exec $ccache gcc-fsf-4.6 "$@"' ; } > ccgcc-4.6
# { echo "#!/bin/sh" ; echo 'exec $ccache g++-fsf-4.6 "$@"' ; } > ccg++-4.6
# also setup bootstrap stage compilers
# yes, ccache 3.1 supports compiler binary hashing
{ echo "#!/bin/sh" ; echo 'exec $ccache st1-clang "$@"' ; } > cc-st1-clang
{ echo "#!/bin/sh" ; echo 'exec $ccache st1-clang++ "$@"' ; } > cc-st1-clang++
{ echo "#!/bin/sh" ; echo 'exec $ccache st2-clang "$@"' ; } > cc-st2-clang
{ echo "#!/bin/sh" ; echo 'exec $ccache st2-clang++ "$@"' ; } > cc-st2-clang++

chmod +x cc*
export PATH=`pwd`:$PATH
popd

CMAKE_OPTIONS="$CMAKE_OPTIONS -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_C_FLAGS=-fno-common -DCMAKE_CXX_FLAGS=-fno-common"

# gcc-4.0.1 FAILS on darwin9
darwin_vers=`uname -r | cut -d. -f1`
case "$darwin_vers" in
8)
export CC=ccgcc
export CXX=ccg++
# export CC=ccgcc-4.6
# export CXX=ccg++-4.6
;;
9)
export CC=ccgcc-4.2
export CXX=ccg++-4.2
;;
10)
export CC=ccgcc
export CXX=ccg++
;;
*) : ;;
esac

CMAKE_OPTIONS="$CMAKE_OPTIONS -DCMAKE_INSTALL_PREFIX=%p/opt/llvm-%v -DLLVM_ENABLE_ASSERTIONS=OFF -DCMAKE_BUILD_TYPE=Release"

# the --max-time option applies to aggregate test time, not individual :(
# CMAKE_OPTIONS="$CMAKE_OPTIONS -DLLVM_LIT_ARGS="-s -v --max-time=14400"

build_workaround () {
# pwd: builddir
# hack away some Makefiles: clangSerialization folded into clangFrontend
pushd ../../llvm-%v.src
for d in tools/clang/{lib,include/clang}
do sed -i.orig -e '/Serialization/d' $d/CMakeLists.txt
done
popd
# bypass a cyclic dependency check
if test ! -f tools/llvm-config/FinalLibDeps.txt
then
echo "ALERT: ignoring cyclic dependency checker..."
pushd tools/llvm-config
ln -s FinalLibDeps.txt{.tmp,}
popd
fi
}

build_workaround_undo() {
# pwd: builddir
# undo our hack from before...
for d in tools/clang/{lib,include/clang}
do mv -f $d/CMakeLists.txt{.orig,}
done
}

echo "######## START of BOOTSTRAP STAGE 1: building llvm/clang with the system compiler"
# wd: %b
mkdir -p ../build/stage1
pushd ../build/stage1
echo "CMAKE_OPTIONS=$CMAKE_OPTIONS"
# Technically, we only need the native back-end...
cmake $CMAKE_OPTIONS ../../llvm-%v.src
# this will fail, but we have to run it first and then fix some deps
make -k || :
build_workaround
make || make VERBOSE=1
cd ..
ln -s stage1 last
popd
# wd: %b
# link stage1 compilers into opt-bin for next stage
pushd ../opt-bin
ln -s ../build/stage1/bin/clang st1-clang
ln -s ../build/stage1/bin/clang++ st1-clang++
popd
# wd: %b
echo "######## END of BOOTSTRAP STAGE 1: built llvm/clang with the system compiler"

# don't bootstrap on powerpc-darwinX, codegen issues
if test "%m" = "powerpc"
then exit
fi
if test "$darwin_vers" = 8
then exit
fi

echo "######## START of BOOTSTRAP STAGE 2: building llvm/clang with stage 1 clang"
export CCACHE_COMPILERCHECK=content
export CC=cc-st1-clang
export CXX=cc-st1-clang++
build_workaround_undo
mkdir -p ../build/stage2
pushd ../build/stage2
cmake $CMAKE_OPTIONS ../../llvm-%v.src
make -k || :
build_workaround
make || make VERBOSE=1
cd ..
rm -f last
ln -s stage2 last
popd
# wd: %b
pushd ../opt-bin
ln -s ../build/stage2/bin/clang st2-clang
ln -s ../build/stage2/bin/clang++ st2-clang++
popd
# wd: %b
echo "######## END of BOOTSTRAP STAGE 2: built llvm/clang with stage 1 clang"
echo "######## START of BOOTSTRAP STAGE 3: building llvm/clang with stage 2 clang"
export CC=cc-st2-clang
export CXX=cc-st2-clang++
export CCACHE_DISABLE=1
build_workaround_undo
mkdir -p ../build/stage3
pushd ../build/stage3
cmake $CMAKE_OPTIONS ../../llvm-%v.src
make -k || :
build_workaround
make || make VERBOSE=1
cd ..
rm -f last
ln -s stage3 last
popd
# wd: %b
echo "######## END of BOOTSTRAP STAGE 3: built llvm/clang with stage 2 clang"
# comparison!
# diff-ing binaries directly doesn't quite work because paths to build
# locations differ 'stage2' vs. 'stage3'.
pushd ../build
# compare pre-linked object files directly
# diff -r stage{2,3}/lib
# diff -r stage{2,3}/bin

diffs=
diff_obj_dir () {
# $1 is reference dir
# $2 is target dir
for f in $2/*
do
if test -d $f
then
diff_obj_dir $1/`basename $f` $f
else
case $f in
*.s.tmp.o) ;;
*.o)
if test -f $1/`basename $f`
then
diff $1/`basename $f` $f && echo "matches: $f" || diffs="$diffs $f"
fi
;;
esac
fi
done
}

diff_obj_dir stage2 stage3
err=
echo "Objects that differ:"
for f in $diffs
do
case $f in
stage3/lib/Support/CMakeFiles/LLVMSupport.dir/CommandLine.cpp.o)
echo " $f -- OK, due to __DATE__, __TIME__ cpp macros" ;;
*) echo " $f -- not OK" ; err=1 ;;
esac
done
test -z "$err"
echo "######## 3-STAGE BOOTSTRAP of llvm/clang PASSED!"
popd

<<

InstallScript: <<
#!/bin/sh -ev
iprefix=%i/opt/llvm-%v
prefix=%p/opt/llvm-%v
pushd ../build/last
make -j1 install/fast DESTDIR="%d"
popd

pushd $iprefix/lib
for f in *.dylib
do
if test ! -L $f
then
install_name_tool -id "$prefix/lib/$f" "$f"
deplibs=`otool -L $f | sed 1,2d | awk '{print $1;}' | tr '\n' ' '`
for d in $deplibs
do
# prefix absolute paths to llvm/clang's lib installation
case $d in
/*) ;;
*) install_name_tool -change "$d" "$prefix/lib/$d" $f ;;
esac
done
fi
done
popd
pushd $iprefix/bin
for f in *
do
if test ! -L $f
then
deplibs=`otool -L $f | sed 1d | awk '{print $1;}' | tr '\n' ' '`
for d in $deplibs
do
# consider substituting with relative @executable_path/../lib ?
case $d in
/*) ;;
@*) ;;
*) install_name_tool -change "$d" "$prefix/lib/$d" $f ;;
esac
done
fi
done
popd

# documentation
docdir=$prefix/share/doc
idocdir=$iprefix/share/doc
mkdir -p $idocdir
cp -R docs $idocdir/llvm
cp -R tools/clang/docs $idocdir/clang
mkdir -p $idocdir/%n
pushd $idocdir/%n
ln -s $docdir/llvm .
ln -s $docdir/clang .
popd
<<
DocFiles: *.TXT README.txt
Shlibs: <<
%p/opt/llvm-%v/lib/liblibclang.3.0.dylib 1.0.0 %n (>= 3.0-1)
!%p/opt/llvm-%v/lib/liblibclang.dylib
!%p/opt/llvm-%v/lib/libLTO.dylib
%p/opt/llvm-%v/lib/profile_rt.dylib 0.0.0 %n (>= 3.0-1)
%p/opt/llvm-%v/lib/BugpointPasses.dylib 0.0.0 %n (>= 3.0-1)
%p/opt/llvm-%v/lib/LLVMHello.dylib 0.0.0 %n (>= 3.0-1)
!%p/opt/llvm-%v/lib/libEnhancedDisassembly.dylib
!%p/opt/llvm-%v/lib/libLLVMAnalysis.dylib
!%p/opt/llvm-%v/lib/libLLVMArchive.dylib
!%p/opt/llvm-%v/lib/libLLVMARMAsmParser.dylib
!%p/opt/llvm-%v/lib/libLLVMARMAsmPrinter.dylib
!%p/opt/llvm-%v/lib/libLLVMARMCodeGen.dylib
!%p/opt/llvm-%v/lib/libLLVMARMDesc.dylib
!%p/opt/llvm-%v/lib/libLLVMARMDisassembler.dylib
!%p/opt/llvm-%v/lib/libLLVMARMInfo.dylib
!%p/opt/llvm-%v/lib/libLLVMAsmParser.dylib
!%p/opt/llvm-%v/lib/libLLVMAsmPrinter.dylib
!%p/opt/llvm-%v/lib/libLLVMBitReader.dylib
!%p/opt/llvm-%v/lib/libLLVMBitWriter.dylib
!%p/opt/llvm-%v/lib/libLLVMCodeGen.dylib
!%p/opt/llvm-%v/lib/libLLVMCore.dylib
!%p/opt/llvm-%v/lib/libLLVMDebugInfo.dylib
!%p/opt/llvm-%v/lib/libLLVMExecutionEngine.dylib
!%p/opt/llvm-%v/lib/libLLVMInstCombine.dylib
!%p/opt/llvm-%v/lib/libLLVMInstrumentation.dylib
!%p/opt/llvm-%v/lib/libLLVMInterpreter.dylib
!%p/opt/llvm-%v/lib/libLLVMJIT.dylib
!%p/opt/llvm-%v/lib/libLLVMLinker.dylib
!%p/opt/llvm-%v/lib/libLLVMMC.dylib
!%p/opt/llvm-%v/lib/libLLVMMCDisassembler.dylib
!%p/opt/llvm-%v/lib/libLLVMMCJIT.dylib
!%p/opt/llvm-%v/lib/libLLVMMCParser.dylib
!%p/opt/llvm-%v/lib/libLLVMObject.dylib
!%p/opt/llvm-%v/lib/libLLVMPowerPCAsmPrinter.dylib
!%p/opt/llvm-%v/lib/libLLVMPowerPCCodeGen.dylib
!%p/opt/llvm-%v/lib/libLLVMPowerPCDesc.dylib
!%p/opt/llvm-%v/lib/libLLVMPowerPCInfo.dylib
!%p/opt/llvm-%v/lib/libLLVMRuntimeDyld.dylib
!%p/opt/llvm-%v/lib/libLLVMScalarOpts.dylib
!%p/opt/llvm-%v/lib/libLLVMSelectionDAG.dylib
!%p/opt/llvm-%v/lib/libLLVMSupport.dylib
!%p/opt/llvm-%v/lib/libLLVMTableGen.dylib
!%p/opt/llvm-%v/lib/libLLVMTarget.dylib
!%p/opt/llvm-%v/lib/libLLVMTransformUtils.dylib
!%p/opt/llvm-%v/lib/libLLVMipa.dylib
!%p/opt/llvm-%v/lib/libLLVMipo.dylib
!%p/opt/llvm-%v/lib/libLLVMX86AsmParser.dylib
!%p/opt/llvm-%v/lib/libLLVMX86AsmPrinter.dylib
!%p/opt/llvm-%v/lib/libLLVMX86CodeGen.dylib
!%p/opt/llvm-%v/lib/libLLVMX86Desc.dylib
!%p/opt/llvm-%v/lib/libLLVMX86Disassembler.dylib
!%p/opt/llvm-%v/lib/libLLVMX86Info.dylib
!%p/opt/llvm-%v/lib/libLLVMX86Utils.dylib
!%p/opt/llvm-%v/lib/libclangAnalysis.dylib
!%p/opt/llvm-%v/lib/libclangARCMigrate.dylib
!%p/opt/llvm-%v/lib/libclangAST.dylib
!%p/opt/llvm-%v/lib/libclangBasic.dylib
!%p/opt/llvm-%v/lib/libclangCodeGen.dylib
!%p/opt/llvm-%v/lib/libclangDriver.dylib
!%p/opt/llvm-%v/lib/libclangFrontend.dylib
!%p/opt/llvm-%v/lib/libclangFrontendTool.dylib
!%p/opt/llvm-%v/lib/libclangIndex.dylib
!%p/opt/llvm-%v/lib/libclangLex.dylib
!%p/opt/llvm-%v/lib/libclangParse.dylib
!%p/opt/llvm-%v/lib/libclangRewrite.dylib
!%p/opt/llvm-%v/lib/libclangSema.dylib
!%p/opt/llvm-%v/lib/libclangStaticAnalyzerCheckers.dylib
!%p/opt/llvm-%v/lib/libclangStaticAnalyzerCore.dylib
!%p/opt/llvm-%v/lib/libclangStaticAnalyzerFrontend.dylib
!%p/opt/llvm-%v/lib/libgtest.dylib
!%p/opt/llvm-%v/lib/libgtest_main.dylib
!%p/opt/llvm-%v/lib/libprofile_rt.dylib
<<
Homepage: http://llvm.org/
DescDetail: <<
The LLVM Project is a collection of modular and reusable compiler and
toolchain technologies. Despite its name, LLVM has little to do with
traditional virtual machines, though it does provide helpful libraries
that can be used to build them.

The goal of the Clang project is to create a new C, C++, Objective C
and Objective C++ front-end for the LLVM compiler.
<<
DescPackaging: <<
Built with shared-libraries to reduce the binary size.
Enabled targets X86, PowerPC, ARM
I suspect the following shlibs are actually plug-ins, and should
(conventionally) be suffixed .so:
profile_rt.dylib
BugpointPasses.dylib
LLVMHello.dylib
<<
DescPort: <<
fangism contributed this port for PowerPC-Darwin8.
*** LLVM/Clang-3.0 still has serious codegen issues for PowerPC
*** It is NOT considered production quality for PowerPC
*** HELP WANTED: in stabilizing and fixing PowerPC CodeGen
*** on llvm/clang svn trunk.
Original package maintained by
Benjamin Reed
with contributions from
Jack Howarth
PatchFile contains:
* workarounds for C++ accessibility bugs in g++-4.0.x
* r147657 from trunk (3.1), which fixes PCH issues on PowerPC.
tools/clang/lib/Serialization/ASTReaderInternals.h
tools/clang/lib/Serialization/ASTReader.cpp
<<

llvm30 stable port .patch

--- llvm-3.0.src/tools/clang/include/clang/Basic/Diagnostic.h.orig 2011-12-14 12:53:57.000000000 -0800
+++ llvm-3.0.src/tools/clang/include/clang/Basic/Diagnostic.h 2011-12-14 15:01:37.000000000 -0800
@@ -583,12 +583,14 @@
/// This is set to ~0U when there is no diagnostic in flight.
unsigned CurDiagID;

+public:
enum {
/// MaxArguments - The maximum number of arguments we can hold. We currently
/// only support up to 10 arguments (%0-%9). A single diagnostic with more
/// than that almost certainly has to be simplified anyway.
MaxArguments = 10
};
+private:

/// NumDiagArgs - This contains the number of entries in Arguments.
signed char NumDiagArgs;
@@ -618,7 +620,9 @@
/// only support 10 ranges, could easily be extended if needed.
CharSourceRange DiagRanges[10];

+public:
enum { MaxFixItHints = 6 };
+private:

/// FixItHints - If valid, provides a hint with some code
/// to insert, remove, or modify at a particular position.
--- llvm-3.0.src/tools/clang/include/clang/Parse/Parser.h.orig 2011-12-14 17:29:30.000000000 -0800
+++ llvm-3.0.src/tools/clang/include/clang/Parse/Parser.h 2011-12-14 17:30:17.000000000 -0800
@@ -409,11 +409,14 @@
return PP.LookAhead(0);
}

+ class BalancedDelimiterTracker;
+
/// \brief Tracks information about the current nesting depth of
/// opening delimiters of each kind.
class DelimiterTracker {
private:
friend class Parser;
+ friend class BalancedDelimiterTracker;

unsigned Paren, Brace, Square, Less, LLLess;
unsigned& get(tok::TokenKind t) {
diff --git clang-svn-orig/tools/clang/lib/Serialization/ASTReader.cpp clang-svn/tools/clang/lib/Serialization/ASTReader.cpp
index 440474b..352678f 100644
--- clang-svn-orig/tools/clang/lib/Serialization/ASTReader.cpp
+++ clang-svn/tools/clang/lib/Serialization/ASTReader.cpp
@@ -747,7 +747,7 @@ ASTDeclContextNameLookupTrait::ReadData(internal_key_type,
unsigned DataLen) {
using namespace clang::io;
unsigned NumDecls = ReadUnalignedLE16(d);
- DeclID *Start = (DeclID *)d;
+ LE32DeclID *Start = (LE32DeclID *)d;
return std::make_pair(Start, Start + NumDecls);
}

diff --git clang-svn-orig/tools/clang/lib/Serialization/ASTReaderInternals.h clang-svn/tools/clang/lib/Serialization/ASTReaderInternals.h
index fb6c830..635f95f 100644
--- clang-svn-orig/tools/clang/lib/Serialization/ASTReaderInternals.h
+++ clang-svn/tools/clang/lib/Serialization/ASTReaderInternals.h
@@ -15,6 +15,7 @@

#include "clang/Basic/OnDiskHashTable.h"
#include "clang/AST/DeclarationName.h"
+#include "llvm/Support/Endian.h"
#include
#include

@@ -41,7 +42,8 @@ public:
///
/// Note that these declaration IDs are local to the module that contains this
/// particular lookup t
- typedef std::pair data_type;
+ typedef llvm::support::ulittle32_t LE32DeclID;
+ typedef std::pair data_type;

/// \brief Special internal key for declaration names.
/// The hash table creates keys for comparison; we do not create

llvm30 _unstable_ port .patch