[llvm-commits] [compiler-rt] r163294 - in /compiler-rt/trunk/lib/asan: Makefile.disabled Makefile.old README.txt output_tests/

Alexey Samsonov samsonov at google.com
Thu Sep 6 02:19:51 PDT 2012


On Thu, Sep 6, 2012 at 12:58 PM, Chandler Carruth <chandlerc at google.com>wrote:

> On Thu, Sep 6, 2012 at 2:39 AM, Alexey Samsonov <samsonov at google.com>wrote:
>
>> Author: samsonov
>> Date: Thu Sep  6 01:39:02 2012
>> New Revision: 163294
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=163294&view=rev
>> Log:
>> [ASan] Nuke output_tests/ in favor of lit_tests/. Stop using Makefile.old.
>>
>
> Wow, awesome! Any specific complaints thus far?
>

Hm, don't think so. Evgeniy is having a hard time leveraging cmake for
Android build, though.


> One I have run into is that there appears to be at least one .o file that
> takes over a minute to compile with a the just-built Clang when doing a
> debug+asserts build... I suspect there is some assert that is even more
> expensive than is reasonable slowing everything down, but I haven't dug
> into it...
>

I haven't tested debug build. Regarding compile time, I've only noticed
relatively slow compile time of main ASan unit test (few seconds). (release
build), but I didn't look at it closely either.


>
>
>>
>> Added:
>>     compiler-rt/trunk/lib/asan/Makefile.disabled
>>       - copied unchanged from r163292,
>> compiler-rt/trunk/lib/asan/Makefile.old
>> Removed:
>>     compiler-rt/trunk/lib/asan/Makefile.old
>>     compiler-rt/trunk/lib/asan/output_tests/
>> Modified:
>>     compiler-rt/trunk/lib/asan/README.txt
>>
>> Removed: compiler-rt/trunk/lib/asan/Makefile.old
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/Makefile.old?rev=163293&view=auto
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/Makefile.old (original)
>> +++ compiler-rt/trunk/lib/asan/Makefile.old (removed)
>> @@ -1,334 +0,0 @@
>> -#===- lib/asan/Makefile.old --------------------------------*- Makefile
>> -*--===#
>> -#
>> -#                     The LLVM Compiler Infrastructure
>> -#
>> -# This file is distributed under the University of Illinois Open Source
>> -# License. See LICENSE.TXT for details.
>> -#
>>
>> -#===------------------------------------------------------------------------===#
>> -
>> -OS=$(shell uname | tr '[A-Z]' '[a-z]')
>> -ROOT=$(shell pwd)
>> -MAKEFILE=Makefile.old  # this file.
>> -
>> -ifeq ($(ARCH), android)
>> -  ANDROID_CFLAGS= \
>> -               -DANDROID \
>> -               -D__WORDSIZE=32 \
>> -               -I$(ANDROID_BUILD_TOP)/external/stlport/stlport \
>> -               -I$(ANDROID_BUILD_TOP)/bionic \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libstdc++/include \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libc/arch-arm/include \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libc/include \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libc/kernel/common \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libc/kernel/arch-arm \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libm/include \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libm/include/arm \
>> -               -I$(ANDROID_BUILD_TOP)/bionic/libthread_db/include \
>> -               -L$(ANDROID_PRODUCT_OUT)/obj/lib
>> -  CLANG_FLAGS= \
>> -               -ccc-host-triple arm-linux-androideabi \
>> -               -D__compiler_offsetof=__builtin_offsetof \
>> -               -D__ELF__=1 \
>> -               -ccc-gcc-name arm-linux-androideabi-g++ \
>> -               $(ANDROID_CFLAGS)
>> -  CC=$(ANDROID_EABI_TOOLCHAIN)/arm-linux-androideabi-gcc
>> $(ANDROID_CFLAGS)
>> -  CXX=$(ANDROID_EABI_TOOLCHAIN)/arm-linux-androideabi-g++
>> $(ANDROID_CFLAGS)
>> -endif
>> -
>> -ifeq ($(ARCH), arm)
>> -  # Example make command line:
>> -  # CROSSTOOL=$HOME/x-tools/arm-unknown-linux-gnueabi/
>> PATH=$CROSSTOOL/bin:$PATH make ARCH=arm asan_test
>> -  CLANG_FLAGS= \
>> -               -ccc-host-triple arm-unknown-linux-gnueabi \
>> -               -march=armv7-a -mfloat-abi=softfp -mfp=neon \
>> -               -ccc-gcc-name arm-unknown-linux-gnueabi-g++ \
>> -               -B$(CROSSTOOL)/lib/gcc/arm-unknown-linux-gnueabi/4.4.4 \
>> -               -B$(CROSSTOOL)/arm-unknown-linux-gnueabi/sys-root/usr/lib
>> \
>> -
>> -I$(CROSSTOOL)/lib/gcc/arm-unknown-linux-gnueabi/4.4.4/include \
>> -
>> -I$(CROSSTOOL)/arm-unknown-linux-gnueabi/include/c++/4.4.4 \
>> -
>> -I$(CROSSTOOL)/arm-unknown-linux-gnueabi/include/c++/4.4.4/arm-unknown-linux-gnueabi
>> \
>> -               -I$(CROSSTOOL)/arm-unknown-linux-gnueabi/sys-root/include
>> \
>> -
>> -I$(CROSSTOOL)/arm-unknown-linux-gnueabi/sys-root/usr/include \
>> -               -L$(CROSSTOOL)/lib/gcc/arm-unknown-linux-gnueabi/4.4.4 \
>> -               -L$(CROSSTOOL)/arm-unknown-linux-gnueabi/sys-root/lib \
>> -               -L$(CROSSTOOL)/arm-unknown-linux-gnueabi/sys-root/usr/lib
>> -  CC=$(CROSSTOOL)/bin/arm-unknown-linux-gnueabi-gcc
>> -  CXX=$(CROSSTOOL)/bin/arm-unknown-linux-gnueabi-g++
>> -endif
>> -
>> -CLANG_FLAGS=
>> -CLANG_VERSION=3.2
>> -CLANG_BUILD=$(ROOT)/../../../../build/Release+Asserts
>> -CLANG_CC=$(CLANG_BUILD)/bin/clang $(CLANG_FLAGS)
>> -CLANG_CXX=$(CLANG_BUILD)/bin/clang++ $(CLANG_FLAGS)
>> -FILE_CHECK=$(CLANG_BUILD)/bin/FileCheck
>> -
>> -CC=$(CLANG_CC)
>> -CXX=$(CLANG_CXX)
>> -
>> -CFLAGS:=-Wall -fvisibility=hidden
>> -
>> -CLEANROOM_CXX=$(CXX) -Wall
>> -
>> -INSTALL_DIR=../asan_clang_$(OS)
>> -BIN=bin_$(OS)
>> -
>> -LIBS=#-lpthread -ldl
>> -ARCH=x86_64
>> -
>> -ASAN_STACK=1
>> -ASAN_GLOBALS=1
>> -ASAN_SCALE=0  # default will be used
>> -ASAN_OFFSET=-1  #default will be used
>> -ASAN_UAR=0
>> -ASAN_HAS_EXCEPTIONS=1
>> -ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
>> -ASAN_HAS_BLACKLIST=1
>> -ASAN_NEEDS_SEGV=1
>> -ASAN_PIE=0
>> -
>> -ifeq ($(ARCH), i386)
>> -BITS=32
>> -SUFF=$(BITS)
>> -CFLAGS:=$(CFLAGS) -m$(BITS)
>> -endif
>> -
>> -ifeq ($(ARCH), x86_64)
>> -BITS=64
>> -SUFF=$(BITS)
>> -CFLAGS:=$(CFLAGS) -m$(BITS)
>> -endif
>> -
>> -ifeq ($(ARCH), arm)
>> -BITS=32
>> -SUFF=_arm
>> -CFLAGS:=$(CFLAGS) -march=armv7-a
>> -ASAN_HAS_EXCEPTIONS=0
>> -endif
>> -
>> -ifeq ($(ARCH), android)
>> -BITS=32
>> -SUFF=_android
>> -CFLAGS:=$(CFLAGS)
>> -ASAN_HAS_EXCEPTIONS=0
>> -endif
>> -
>> -PIE=
>> -ifeq ($(ASAN_PIE), 1)
>> -  PIE=-fPIE -pie
>> -endif
>> -
>> -# This will build libasan on linux for both x86_64 and i386 in the
>> -# desired location. The Mac library is already build by the clang's make.
>> -#
>> $(CLANG_BUILD)/lib/clang/$(CLANG_VERSION)/lib/$(OS)/libclang_rt.asan-$(ARCH).a
>> -LIBASAN_INST_DIR=$(CLANG_BUILD)/lib/clang/$(CLANG_VERSION)/lib/$(OS)
>> -LIBASAN_A=$(LIBASAN_INST_DIR)/libclang_rt.asan-$(ARCH).a
>> -
>> -BLACKLIST=
>> -ifeq ($(ASAN_HAS_BLACKLIST), 1)
>> -  BLACKLIST=-mllvm -asan-blacklist=$(ROOT)/tests/asan_test.ignore
>> -endif
>> -
>> -COMMON_ASAN_DEFINES=\
>> -                -DASAN_UAR=$(ASAN_UAR) \
>> -               -DASAN_HAS_EXCEPTIONS=$(ASAN_HAS_EXCEPTIONS) \
>> -               -DASAN_NEEDS_SEGV=$(ASAN_NEEDS_SEGV) \
>> -               -DASAN_HAS_BLACKLIST=$(ASAN_HAS_BLACKLIST)
>> -
>> -CLANG_ASAN_CXX=$(CLANG_CXX) \
>> -              -faddress-sanitizer \
>> -               $(BLACKLIST)  \
>> -               -mllvm -asan-stack=$(ASAN_STACK)      \
>> -               -mllvm -asan-globals=$(ASAN_GLOBALS)  \
>> -               -mllvm -asan-mapping-scale=$(ASAN_SCALE) \
>> -               -mllvm -asan-mapping-offset-log=$(ASAN_OFFSET) \
>> -               -mllvm -asan-use-after-return=$(ASAN_UAR) \
>> -               $(COMMON_ASAN_DEFINES)
>> -
>> -CLANG_ASAN_LD=$(CLANG_CXX) -faddress-sanitizer
>> -
>> -GCC_ASAN_PATH=SET_FROM_COMMAND_LINE
>> -GCC_ASAN_CXX=$(GCC_ASAN_PATH)/g++ \
>> -            -faddress-sanitizer \
>> -            $(COMMON_ASAN_DEFINES)
>> -
>> -GCC_ASAN_LD=$(GCC_ASAN_PATH)/g++ -ldl -lpthread
>> -
>> -ASAN_COMPILER=clang
>> -
>> -ifeq ($(ASAN_COMPILER), clang)
>> -  ASAN_CXX=$(CLANG_ASAN_CXX)
>> -  ASAN_LD=$(CLANG_ASAN_LD)
>> -  ASAN_LD_TAIL=
>> -endif
>> -
>> -ifeq ($(ASAN_COMPILER), gcc)
>> -  ASAN_CXX=$(GCC_ASAN_CXX)
>> -  ASAN_LD=$(GCC_ASAN_LD)
>> -  ASAN_LD_TAIL=$(LIBASAN_A)
>> -endif
>> -
>> -INTERCEPTION=../interception
>> -MACH_OVERRIDE=$(INTERCEPTION)/mach_override
>> -COMMON=../sanitizer_common
>> -
>> -RTL_HDR=$(wildcard *.h) \
>> -       $(wildcard $(INTERCEPTION)/*.h) \
>> -       $(wildcard $(MACH_OVERRIDE)/*.h) \
>> -       $(wildcard $(COMMON)/*.h)
>> -
>> -LIBTSAN_SRC=$(wildcard *.cc)
>> -INTERCEPTION_SRC=$(wildcard $(INTERCEPTION)/*.cc)
>> -MACH_OVERRIDE_SRC=$(wildcard $(MACH_OVERRIDE)/*.c)
>> -COMMON_SRC=$(wildcard $(COMMON)/*.cc)
>> -
>> -
>> -LIBASAN_OBJ=$(patsubst %.cc,$(BIN)/%$(SUFF).o,$(LIBTSAN_SRC)) \
>> -           $(patsubst
>> $(INTERCEPTION)/%.cc,$(BIN)/%$(SUFF).o,$(INTERCEPTION_SRC)) \
>> -           $(patsubst $(COMMON)/%.cc,$(BIN)/%$(SUFF).o,$(COMMON_SRC)) \
>> -           $(patsubst
>> $(MACH_OVERRIDE)/%.c,$(BIN)/%$(SUFF).o,$(MACH_OVERRIDE_SRC))
>> -
>> -GTEST_ROOT=third_party/googletest
>> -GTEST_INCLUDE=-I$(GTEST_ROOT)/include
>> -GTEST_MAKE_DIR=$(GTEST_ROOT)/make-$(OS)$(SUFF)
>> -GTEST_LIB=$(GTEST_MAKE_DIR)/gtest-all.o
>> -
>> -all: b64 b32
>> -
>> -test: t64 t32 output_tests
>> -       @echo "ALL TESTS PASSED"
>> -
>> -output_tests: b32 b64
>> -       cd output_tests && ./test_output.sh $(CLANG_CXX) $(CLANG_CC)
>> $(FILE_CHECK)
>> -
>> -t64: b64
>> -       $(BIN)/asan_test64
>> -t32: b32
>> -       $(BIN)/asan_test32
>> -
>> -b64: | mk_bin_dir
>> -       $(MAKE) -f $(MAKEFILE) ARCH=x86_64 asan_test asan_benchmarks
>> -b32: | mk_bin_dir
>> -       $(MAKE) -f $(MAKEFILE) ARCH=i386 asan_test asan_benchmarks
>> -
>> -lib64:
>> -       $(MAKE) -f $(MAKEFILE) ARCH=x86_64 lib
>> -lib32:
>> -       $(MAKE) -f $(MAKEFILE) ARCH=i386 lib
>> -
>> -mk_bin_dir:
>> -       mkdir -p $(BIN)
>> -
>> -clang:
>> -       cd ../ && llvm/rebuild_clang_and_asan.sh > /dev/null
>> -
>> -install: install_clang
>> -
>> -$(INSTALL_DIR):
>> -       mkdir -p $(INSTALL_DIR) $(INSTALL_DIR)/bin $(INSTALL_DIR)/lib
>> -
>> -install_clang: | $(INSTALL_DIR)
>> -       cp -v $(CLANG_BUILD)/bin/clang $(INSTALL_DIR)/bin
>> -       cp -rv $(CLANG_BUILD)/lib/clang $(INSTALL_DIR)/lib
>> -       (cd $(INSTALL_DIR)/bin; ln -sf clang clang++)
>> -
>> -#install_lib: | $(INSTALL_DIR)
>> -#      cp -v $(CLANG_BUILD)/lib/libasan*.a $(INSTALL_DIR)/lib
>> -
>> -$(BIN)/asan_noinst_test$(SUFF).o: tests/asan_noinst_test.cc $(RTL_HDR)
>> $(MAKEFILE)
>> -       $(CLEANROOM_CXX) $(COMMON_ASAN_DEFINES) $(PIE) $(CFLAGS)
>> $(GTEST_INCLUDE) \
>> -               -I. -I.. -I../../include -g -c $< -O2 -o $@
>> -
>> -$(BIN)/asan_break_optimization$(SUFF).o:
>> tests/asan_break_optimization.cc $(MAKEFILE)
>> -       $(CLEANROOM_CXX) $(PIE) $(CFLAGS) -c $< -O0 -o $@
>> -
>> -$(BIN)/%_test$(SUFF).o: tests/%_test.cc $(RTL_HDR) $(MAKEFILE)
>> -       $(ASAN_CXX) $(GTEST_INCLUDE) -I. -I.. -g -c $< -O2 -o $@ $(PIE)
>> $(CFLAGS)
>> -
>> -$(BIN)/%_test$(SUFF).o: tests/%_test.mm $(RTL_HDR) $(MAKEFILE)
>> -       $(ASAN_CXX) $(GTEST_INCLUDE) -I. -I.. -g -c $< -O2 -o $@ -ObjC
>> $(PIE) $(CFLAGS)
>> -
>> -RTL_COMMON_FLAGS=$(PIE) $(CFLAGS) -fPIC -c -O2 -fno-exceptions
>> -funwind-tables \
>> -          -Ithird_party -I.. -I../../include $(ASAN_FLAGS)
>> -
>> -$(BIN)/%$(SUFF).o: $(INTERCEPTION)/%.cc $(RTL_HDR) $(MAKEFILE)
>> -       $(CXX) $(RTL_COMMON_FLAGS) -o $@ -g $<
>> -
>> -$(BIN)/%$(SUFF).o: $(COMMON)/%.cc $(RTL_HDR) $(MAKEFILE)
>> -       $(CXX) $(RTL_COMMON_FLAGS) -o $@ -g $<
>> -
>> -$(BIN)/%$(SUFF).o: $(MACH_OVERRIDE)/%.c $(RTL_HDR) $(MAKEFILE)
>> -       $(CC) $(RTL_COMMON_FLAGS) -o $@ -g $<
>> -
>> -$(BIN)/%$(SUFF).o: %.cc $(RTL_HDR) $(MAKEFILE)
>> -       $(CXX) $(RTL_COMMON_FLAGS) -o $@ -g $<  \
>> -               -DASAN_NEEDS_SEGV=$(ASAN_NEEDS_SEGV) \
>> -               -DASAN_HAS_EXCEPTIONS=$(ASAN_HAS_EXCEPTIONS) \
>> -
>> -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=$(ASAN_FLEXIBLE_MAPPING_AND_OFFSET)
>> -
>> -$(BIN)/%$(SUFF).o: %.c $(RTL_HDR) $(MAKEFILE)
>> -       $(CC) $(PIE) $(CFLAGS) -fPIC -c -O2 -o $@ -g $< -Ithird_party \
>> -               $(ASAN_FLAGS)
>> -
>> -ifeq ($(OS),darwin)
>> -LD_FLAGS=-framework Foundation
>> -else
>> -LD_FLAGS=
>> -endif
>> -
>> -lib: $(LIBASAN_A)
>> -
>> -$(LIBASAN_A): mk_bin_dir $(LIBASAN_OBJ) $(MAKEFILE)
>> -       mkdir -p $(LIBASAN_INST_DIR)
>> -       ar ru $@ $(LIBASAN_OBJ)
>> -       $(CXX) -shared $(CFLAGS) $(LIBASAN_OBJ) $(LD_FLAGS) -o
>> $(BIN)/libasan$(SUFF).so
>> -
>> -TEST_OBJECTS_COMMON=\
>> -            $(BIN)/asan_globals_test$(SUFF).o \
>> -            $(BIN)/asan_break_optimization$(SUFF).o \
>> -            $(BIN)/asan_noinst_test$(SUFF).o \
>> -            $(BIN)/asan_test$(SUFF).o
>> -
>> -BENCHMARK_OBJECTS=\
>> -            $(BIN)/asan_benchmarks_test$(SUFF).o \
>> -            $(BIN)/asan_break_optimization$(SUFF).o
>> -
>> -ifeq ($(OS),darwin)
>> -TEST_OBJECTS=$(TEST_OBJECTS_COMMON) \
>> -            $(BIN)/asan_mac_test$(SUFF).o
>> -else
>> -TEST_OBJECTS=$(TEST_OBJECTS_COMMON)
>> -endif
>> -
>> -$(BIN)/asan_test$(SUFF): $(TEST_OBJECTS) $(LIBASAN_A) $(MAKEFILE)
>> tests/asan_test.ignore $(GTEST_LIB)
>> -       $(ASAN_LD) $(PIE) $(CFLAGS) -g -O3 $(TEST_OBJECTS) \
>> -               $(LD_FLAGS) -o $@ $(LIBS) $(GTEST_LIB) $(ASAN_LD_TAIL)
>> -
>> -$(BIN)/asan_benchmarks$(SUFF): $(BENCHMARK_OBJECTS) $(LIBASAN_A)
>> $(MAKEFILE) $(GTEST_LIB)
>> -       $(ASAN_LD) $(PIE) $(CFLAGS) -g -O3 $(BENCHMARK_OBJECTS) \
>> -               $(LD_FLAGS) -o $@ $(LIBS) $(GTEST_LIB) $(ASAN_LD_TAIL)
>> -
>> -asan_test: $(BIN)/asan_test$(SUFF)
>> -
>> -asan_benchmarks: $(BIN)/asan_benchmarks$(SUFF)
>> -
>> -# for now, build gtest with clang/asan even if we use a different
>> compiler.
>> -$(GTEST_LIB):
>> -       mkdir -p $(GTEST_MAKE_DIR) && \
>> -       cd $(GTEST_MAKE_DIR) && \
>> -       $(MAKE) -f ../make/Makefile CXXFLAGS="$(PIE) $(CFLAGS) -g -w" \
>> -         CXX="$(CLANG_CXX)"
>> -
>> -get_third_party:
>> -       rm -rf third_party
>> -       mkdir third_party
>> -       (cd third_party && \
>> -       svn co -r375        http://googletest.googlecode.com/svn/trunkgoogletest \
>> -       )
>> -
>> -clean:
>> -       rm -f *.o *.ll *.S *.a *.log asan_test64* asan_test32*  a.out
>> perf.data log
>> -       rm -f $(LIBASAN_INST_DIR)/libclang_rt.asan-*.a
>> -       rm -rf $(BIN)
>> -       rm -rf $(GTEST_ROOT)/make-*
>>
>> Modified: compiler-rt/trunk/lib/asan/README.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/README.txt?rev=163294&r1=163293&r2=163294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/README.txt (original)
>> +++ compiler-rt/trunk/lib/asan/README.txt Thu Sep  6 01:39:02 2012
>> @@ -4,22 +4,26 @@
>>  We are in the process of integrating AddressSanitizer with LLVM, stay
>> tuned.
>>
>>  Directory structre:
>> -
>>  README.txt       : This file.
>> -Makefile.mk      : Currently a stub for a proper makefile. not usable.
>> -Makefile.old     : Old out-of-tree makefile, the only usable one so far.
>> +Makefile.mk      : File for make-based build.
>> +CMakeLists.txt   : File for cmake-based build.
>>  asan_*.{cc,h}    : Sources of the asan run-time lirbary.
>> -mach_override/*  : Utility to override functions on Darwin (MIT License).
>>  scripts/*        : Helper scripts.
>> +tests/*          : ASan unit tests.
>> +lit_tests/*      : ASan output tests.
>>
>> -Temporary build instructions (verified on linux):
>> +Also ASan runtime needs the following libraries:
>> +lib/interception/      : Machinery used to intercept function calls.
>> +lib/sanitizer_common/  : Code shared between ASan and TSan.
>>
>> -cd lib/asan
>> -make -f Makefile.old get_third_party  # gets googletest
>> -make -f Makefile.old test -j 8 CLANG_BUILD=/path/to/Release+Asserts
>> -# Optional:
>> -# make -f Makefile.old install # installs clang and rt to
>> lib/asan_clang_linux
>> +Currently ASan runtime can be built by both make and cmake build systems.
>> +(see compiler-rt/make and files Makefile.mk for make-based build and
>> +files CMakeLists.txt for cmake-based build).
>>
>> -For more info see http://code.google.com/p/address-sanitizer/
>> +ASan unit and output tests work only with cmake. You may run this
>> +command from the root of your cmake build tree:
>>
>> +make check-asan
>>
>> +For more instructions see:
>> +http://code.google.com/p/address-sanitizer/wiki/HowToBuild
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>


-- 
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120906/4be63cc4/attachment.html>


More information about the llvm-commits mailing list