[llvm] r317135 - [LLVM-C] Expose functions to create debug locations via DIBuilder.
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 2 13:21:08 PDT 2017
+Harlan
> On Nov 2, 2017, at 1:20 PM, Adrian Prantl <aprantl at apple.com> wrote:
>
> It looks like this commit forgot to update the module map / or the umbrella header:
>
> /Data/llvm/lib/IR/DebugInfo.cpp:15:2: warning: missing submodule 'LLVM_C.DebugInfo' [-Wincomplete-umbrella]
>
> -- adrian
>
>> On Nov 1, 2017, at 3:18 PM, whitequark via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: whitequark
>> Date: Wed Nov 1 15:18:52 2017
>> New Revision: 317135
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=317135&view=rev
>> Log:
>> [LLVM-C] Expose functions to create debug locations via DIBuilder.
>>
>> These include:
>> * Several functions for creating an LLVMDIBuilder,
>> * LLVMDIBuilderCreateCompileUnit,
>> * LLVMDIBuilderCreateFile,
>> * LLVMDIBuilderCreateDebugLocation.
>>
>> Patch by Harlan Haskins.
>>
>> Differential Revision: https://reviews.llvm.org/D32368
>>
>> Added:
>> llvm/trunk/include/llvm-c/DebugInfo.h
>> llvm/trunk/test/Bindings/llvm-c/debug_info.ll
>> llvm/trunk/tools/llvm-c-test/debuginfo.c
>> Modified:
>> llvm/trunk/lib/IR/DebugInfo.cpp
>> llvm/trunk/tools/llvm-c-test/CMakeLists.txt
>> llvm/trunk/tools/llvm-c-test/llvm-c-test.h
>> llvm/trunk/tools/llvm-c-test/main.c
>>
>> Added: llvm/trunk/include/llvm-c/DebugInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/DebugInfo.h?rev=317135&view=auto
>> ==============================================================================
>> --- llvm/trunk/include/llvm-c/DebugInfo.h (added)
>> +++ llvm/trunk/include/llvm-c/DebugInfo.h Wed Nov 1 15:18:52 2017
>> @@ -0,0 +1,202 @@
>> +//===------------ DebugInfo.h - LLVM C API Debug Info API -----------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +///
>> +/// This file declares the C API endpoints for generating DWARF Debug Info
>> +///
>> +/// Note: This interface is experimental. It is *NOT* stable, and may be
>> +/// changed without warning.
>> +///
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "llvm-c/Core.h"
>> +
>> +#ifdef __cplusplus
>> +extern "C" {
>> +#endif
>> +
>> +/// Debug info flags.
>> +typedef enum {
>> + LLVMDIFlagZero = 0,
>> + LLVMDIFlagPrivate = 1,
>> + LLVMDIFlagProtected = 2,
>> + LLVMDIFlagPublic = 3,
>> + LLVMDIFlagFwdDecl = 1 << 2,
>> + LLVMDIFlagAppleBlock = 1 << 3,
>> + LLVMDIFlagBlockByrefStruct = 1 << 4,
>> + LLVMDIFlagVirtual = 1 << 5,
>> + LLVMDIFlagArtificial = 1 << 6,
>> + LLVMDIFlagExplicit = 1 << 7,
>> + LLVMDIFlagPrototyped = 1 << 8,
>> + LLVMDIFlagObjcClassComplete = 1 << 9,
>> + LLVMDIFlagObjectPointer = 1 << 10,
>> + LLVMDIFlagVector = 1 << 11,
>> + LLVMDIFlagStaticMember = 1 << 12,
>> + LLVMDIFlagLValueReference = 1 << 13,
>> + LLVMDIFlagRValueReference = 1 << 14,
>> + LLVMDIFlagReserved = 1 << 15,
>> + LLVMDIFlagSingleInheritance = 1 << 16,
>> + LLVMDIFlagMultipleInheritance = 2 << 16,
>> + LLVMDIFlagVirtualInheritance = 3 << 16,
>> + LLVMDIFlagIntroducedVirtual = 1 << 18,
>> + LLVMDIFlagBitField = 1 << 19,
>> + LLVMDIFlagNoReturn = 1 << 20,
>> + LLVMDIFlagMainSubprogram = 1 << 21,
>> + LLVMDIFlagIndirectVirtualBase = (1 << 2) | (1 << 5),
>> + LLVMDIFlagAccessibility = LLVMDIFlagPrivate | LLVMDIFlagProtected |
>> + LLVMDIFlagPublic,
>> + LLVMDIFlagPtrToMemberRep = LLVMDIFlagSingleInheritance |
>> + LLVMDIFlagMultipleInheritance |
>> + LLVMDIFlagVirtualInheritance
>> +} LLVMDIFlags;
>> +
>> +/// Source languages known by DWARF.
>> +typedef enum {
>> + LLVMDWARFSourceLanguageC89,
>> + LLVMDWARFSourceLanguageC,
>> + LLVMDWARFSourceLanguageAda83,
>> + LLVMDWARFSourceLanguageC_plus_plus,
>> + LLVMDWARFSourceLanguageCobol74,
>> + LLVMDWARFSourceLanguageCobol85,
>> + LLVMDWARFSourceLanguageFortran77,
>> + LLVMDWARFSourceLanguageFortran90,
>> + LLVMDWARFSourceLanguagePascal83,
>> + LLVMDWARFSourceLanguageModula2,
>> + // New in DWARF v3:
>> + LLVMDWARFSourceLanguageJava,
>> + LLVMDWARFSourceLanguageC99,
>> + LLVMDWARFSourceLanguageAda95,
>> + LLVMDWARFSourceLanguageFortran95,
>> + LLVMDWARFSourceLanguagePLI,
>> + LLVMDWARFSourceLanguageObjC,
>> + LLVMDWARFSourceLanguageObjC_plus_plus,
>> + LLVMDWARFSourceLanguageUPC,
>> + LLVMDWARFSourceLanguageD,
>> + // New in DWARF v4:
>> + LLVMDWARFSourceLanguagePython,
>> + // New in DWARF v5:
>> + LLVMDWARFSourceLanguageOpenCL,
>> + LLVMDWARFSourceLanguageGo,
>> + LLVMDWARFSourceLanguageModula3,
>> + LLVMDWARFSourceLanguageHaskell,
>> + LLVMDWARFSourceLanguageC_plus_plus_03,
>> + LLVMDWARFSourceLanguageC_plus_plus_11,
>> + LLVMDWARFSourceLanguageOCaml,
>> + LLVMDWARFSourceLanguageRust,
>> + LLVMDWARFSourceLanguageC11,
>> + LLVMDWARFSourceLanguageSwift,
>> + LLVMDWARFSourceLanguageJulia,
>> + LLVMDWARFSourceLanguageDylan,
>> + LLVMDWARFSourceLanguageC_plus_plus_14,
>> + LLVMDWARFSourceLanguageFortran03,
>> + LLVMDWARFSourceLanguageFortran08,
>> + LLVMDWARFSourceLanguageRenderScript,
>> + LLVMDWARFSourceLanguageBLISS,
>> + // Vendor extensions:
>> + LLVMDWARFSourceLanguageMips_Assembler,
>> + LLVMDWARFSourceLanguageGOOGLE_RenderScript,
>> + LLVMDWARFSourceLanguageBORLAND_Delphi
>> +} LLVMDWARFSourceLanguage;
>> +
>> +/// The amount of debug information to emit.
>> +typedef enum {
>> + LLVMDWARFEmissionNone = 0,
>> + LLVMDWARFEmissionFull,
>> + LLVMDWARFEmissionLineTablesOnly
>> +} LLVMDWARFEmissionKind;
>> +
>> +/// The current debug metadata version number.
>> +unsigned LLVMDebugMetadataVersion(void);
>> +
>> +/// The version of debug metadata that's present in the provided \c Module.
>> +unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module);
>> +
>> +/// Strip debug info in the module if it exists.
>> +///
>> +/// To do this, we remove all calls to the debugger intrinsics and any named
>> +/// metadata for debugging. We also remove debug locations for instructions.
>> +/// Return true if module is modified.
>> +LLVMBool LLVMStripModuleDebugInfo(LLVMModuleRef Module);
>> +
>> +/// Construct a builder for a module, and do not allow for unresolved nodes
>> +/// attached to the module.
>> +LLVMDIBuilderRef LLVMCreateDIBuilderDisallowUnresolved(LLVMModuleRef M);
>> +
>> +/// Construct a builder for a module and collect unresolved nodes attached
>> +/// to the module in order to resolve cycles during a call to
>> +/// \c LLVMDIBuilderFinalize.
>> +LLVMDIBuilderRef LLVMCreateDIBuilder(LLVMModuleRef M);
>> +
>> +/// Deallocates the DIBuilder and everything it owns.
>> +/// @note You must call \c LLVMDIBuilderFinalize before this
>> +void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder);
>> +
>> +/// Construct any deferred debug info descriptors.
>> +void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder);
>> +
>> +/// A CompileUnit provides an anchor for all debugging
>> +/// information generated during this instance of compilation.
>> +/// \param Lang Source programming language, eg.
>> +/// \c LLVMDWARFSourceLanguageC99
>> +/// \param File File info.
>> +/// \param Producer Identify the producer of debugging information
>> +/// and code. Usually this is a compiler
>> +/// version string.
>> +/// \param ProducerLen The length of the C string passed to \c Producer.
>> +/// \param isOptimized A boolean flag which indicates whether optimization
>> +/// is enabled or not.
>> +/// \param Flags This string lists command line options. This
>> +/// string is directly embedded in debug info
>> +/// output which may be used by a tool
>> +/// analyzing generated debugging information.
>> +/// \param FlagsLen The length of the C string passed to \c Flags.
>> +/// \param RuntimeVer This indicates runtime version for languages like
>> +/// Objective-C.
>> +/// \param SplitName The name of the file that we'll split debug info
>> +/// out into.
>> +/// \param SplitNameLen The length of the C string passed to \c SplitName.
>> +/// \param Kind The kind of debug information to generate.
>> +/// \param DWOId The DWOId if this is a split skeleton compile unit.
>> +/// \param SplitDebugInlining Whether to emit inline debug info.
>> +/// \param DebugInfoForProfiling Whether to emit extra debug info for
>> +/// profile collection.
>> +LLVMMetadataRef LLVMDIBuilderCreateCompileUnit(
>> + LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang,
>> + LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen,
>> + LLVMBool isOptimized, const char *Flags, size_t FlagsLen,
>> + unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen,
>> + LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining,
>> + LLVMBool DebugInfoForProfiling);
>> +
>> +/// Create a file descriptor to hold debugging information for a file.
>> +/// \param Builder The DIBuilder.
>> +/// \param Filename File name.
>> +/// \param FilenameLen The length of the C string passed to \c Filename.
>> +/// \param Directory Directory.
>> +/// \param DirectoryLen The length of the C string passed to \c Directory.
>> +LLVMMetadataRef
>> +LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const char *Filename,
>> + size_t FilenameLen, const char *Directory,
>> + size_t DirectoryLen);
>> +
>> +/// Creates a new DebugLocation that describes a source location.
>> +/// \param Line The line in the source file.
>> +/// \param Column The column in the source file.
>> +/// \param Scope The scope in which the location resides.
>> +/// \param InlinedAt The scope where this location was inlined, if at all.
>> +/// (optional).
>> +/// \note If the item to which this location is attached cannot be
>> +/// attributed to a source line, pass 0 for the line and column.
>> +LLVMMetadataRef
>> +LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line,
>> + unsigned Column, LLVMMetadataRef Scope,
>> + LLVMMetadataRef InlinedAt);
>> +
>> +#ifdef __cplusplus
>> +} // end extern "C"
>> +#endif
>>
>> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=317135&r1=317134&r2=317135&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
>> +++ llvm/trunk/lib/IR/DebugInfo.cpp Wed Nov 1 15:18:52 2017
>> @@ -12,10 +12,12 @@
>> //
>> //===----------------------------------------------------------------------===//
>>
>> -#include "llvm/IR/DebugInfo.h"
>> +#include "llvm-c/DebugInfo.h"
>> +#include "LLVMContextImpl.h"
>> #include "llvm/ADT/DenseMap.h"
>> #include "llvm/ADT/DenseSet.h"
>> #include "llvm/ADT/None.h"
>> +#include "llvm/ADT/STLExtras.h"
>> #include "llvm/ADT/SmallPtrSet.h"
>> #include "llvm/ADT/SmallVector.h"
>> #include "llvm/ADT/StringRef.h"
>> @@ -23,6 +25,8 @@
>> #include "llvm/IR/Constants.h"
>> #include "llvm/IR/DebugInfoMetadata.h"
>> #include "llvm/IR/DebugLoc.h"
>> +#include "llvm/IR/DebugInfo.h"
>> +#include "llvm/IR/DIBuilder.h"
>> #include "llvm/IR/Function.h"
>> #include "llvm/IR/GVMaterializer.h"
>> #include "llvm/IR/Instruction.h"
>> @@ -692,3 +696,79 @@ void Instruction::applyMergedLocation(co
>> setDebugLoc(DILocation::get(
>> Result->getContext(), 0, 0, Result->getScope(), Result->getInlinedAt()));
>> }
>> +
>> +//===----------------------------------------------------------------------===//
>> +// LLVM C API implementations.
>> +//===----------------------------------------------------------------------===//
>> +
>> +static unsigned map_from_llvmDWARFsourcelanguage(LLVMDWARFSourceLanguage lang) {
>> + switch (lang) {
>> +#define HANDLE_DW_LANG(ID, NAME, VERSION, VENDOR) \
>> +case LLVMDWARFSourceLanguage##NAME: return ID;
>> +#include "llvm/BinaryFormat/Dwarf.def"
>> +#undef HANDLE_DW_LANG
>> + }
>> + llvm_unreachable("Unhandled Tag");
>> +}
>> +
>> +unsigned LLVMDebugMetadataVersion() {
>> + return DEBUG_METADATA_VERSION;
>> +}
>> +
>> +LLVMDIBuilderRef LLVMCreateDIBuilderDisallowUnresolved(LLVMModuleRef M) {
>> + return wrap(new DIBuilder(*unwrap(M), false));
>> +}
>> +
>> +LLVMDIBuilderRef LLVMCreateDIBuilder(LLVMModuleRef M) {
>> + return wrap(new DIBuilder(*unwrap(M)));
>> +}
>> +
>> +unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef M) {
>> + return getDebugMetadataVersionFromModule(*unwrap(M));
>> +}
>> +
>> +LLVMBool LLVMStripModuleDebugInfo(LLVMModuleRef M) {
>> + return StripDebugInfo(*unwrap(M));
>> +}
>> +
>> +void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder) {
>> + delete unwrap(Builder);
>> +}
>> +
>> +void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder) {
>> + unwrap(Builder)->finalize();
>> +}
>> +
>> +LLVMMetadataRef LLVMDIBuilderCreateCompileUnit(
>> + LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang,
>> + LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen,
>> + LLVMBool isOptimized, const char *Flags, size_t FlagsLen,
>> + unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen,
>> + LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining,
>> + LLVMBool DebugInfoForProfiling) {
>> + auto File = unwrap<DIFile>(FileRef);
>> +
>> + return wrap(unwrap(Builder)->createCompileUnit(
>> + map_from_llvmDWARFsourcelanguage(Lang), File,
>> + StringRef(Producer, ProducerLen), isOptimized,
>> + StringRef(Flags, FlagsLen), RuntimeVer,
>> + StringRef(SplitName, SplitNameLen),
>> + static_cast<DICompileUnit::DebugEmissionKind>(Kind), DWOId,
>> + SplitDebugInlining, DebugInfoForProfiling));
>> +}
>> +
>> +LLVMMetadataRef
>> +LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const char *Filename,
>> + size_t FilenameLen, const char *Directory,
>> + size_t DirectoryLen) {
>> + return wrap(unwrap(Builder)->createFile(StringRef(Filename, FilenameLen),
>> + StringRef(Directory, DirectoryLen)));
>> +}
>> +
>> +LLVMMetadataRef
>> +LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line,
>> + unsigned Column, LLVMMetadataRef Scope,
>> + LLVMMetadataRef InlinedAt) {
>> + return wrap(DILocation::get(*unwrap(Ctx), Line, Column, unwrap(Scope),
>> + unwrap(InlinedAt)));
>> +}
>>
>> Added: llvm/trunk/test/Bindings/llvm-c/debug_info.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/llvm-c/debug_info.ll?rev=317135&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/Bindings/llvm-c/debug_info.ll (added)
>> +++ llvm/trunk/test/Bindings/llvm-c/debug_info.ll Wed Nov 1 15:18:52 2017
>> @@ -0,0 +1,8 @@
>> +; RUN: llvm-c-test --test-dibuilder | FileCheck %s
>> +
>> +; CHECK: ; ModuleID = 'debuginfo.c'
>> +; CHECK-NEXT: source_filename = "debuginfo.c"
>> +
>> +; CHECK: !llvm.dbg.cu = !{!0}
>> +; CHECK: !0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "llvm-c-test", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false)
>> +; CHECK-NEXT: !1 = !DIFile(filename: "debuginfo.c\00", directory: ".")
>>
>> Modified: llvm/trunk/tools/llvm-c-test/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-c-test/CMakeLists.txt?rev=317135&r1=317134&r2=317135&view=diff
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-c-test/CMakeLists.txt (original)
>> +++ llvm/trunk/tools/llvm-c-test/CMakeLists.txt Wed Nov 1 15:18:52 2017
>> @@ -38,6 +38,7 @@ endif ()
>> add_llvm_tool(llvm-c-test
>> attributes.c
>> calc.c
>> + debuginfo.c
>> diagnostic.c
>> disassemble.c
>> echo.cpp
>>
>> Added: llvm/trunk/tools/llvm-c-test/debuginfo.c
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-c-test/debuginfo.c?rev=317135&view=auto
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-c-test/debuginfo.c (added)
>> +++ llvm/trunk/tools/llvm-c-test/debuginfo.c Wed Nov 1 15:18:52 2017
>> @@ -0,0 +1,38 @@
>> +/*===-- debuginfo.c - tool for testing libLLVM and llvm-c API -------------===*\
>> +|* *|
>> +|* The LLVM Compiler Infrastructure *|
>> +|* *|
>> +|* This file is distributed under the University of Illinois Open Source *|
>> +|* License. See LICENSE.TXT for details. *|
>> +|* *|
>> +|*===----------------------------------------------------------------------===*|
>> +|* *|
>> +|* Tests for the LLVM C DebugInfo API *|
>> +|* *|
>> +\*===----------------------------------------------------------------------===*/
>> +
>> +#include "llvm-c-test.h"
>> +#include "llvm-c/DebugInfo.h"
>> +#include <string.h>
>> +#include <stdio.h>
>> +
>> +int llvm_test_dibuilder() {
>> + LLVMModuleRef M = LLVMModuleCreateWithName("debuginfo.c");
>> + LLVMDIBuilderRef DIB = LLVMCreateDIBuilder(M);
>> +
>> + LLVMMetadataRef File = LLVMDIBuilderCreateFile(DIB, "debuginfo.c", 12,
>> + ".", 1);
>> +
>> + LLVMDIBuilderCreateCompileUnit(DIB,
>> + LLVMDWARFSourceLanguageC, File,"llvm-c-test", 11, 0, NULL, 0, 0,
>> + NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0);
>> +
>> + char *MStr = LLVMPrintModuleToString(M);
>> + puts(MStr);
>> + LLVMDisposeMessage(MStr);
>> +
>> + LLVMDisposeDIBuilder(DIB);
>> + LLVMDisposeModule(M);
>> +
>> + return 0;
>> +}
>>
>> Modified: llvm/trunk/tools/llvm-c-test/llvm-c-test.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-c-test/llvm-c-test.h?rev=317135&r1=317134&r2=317135&view=diff
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-c-test/llvm-c-test.h (original)
>> +++ llvm/trunk/tools/llvm-c-test/llvm-c-test.h Wed Nov 1 15:18:52 2017
>> @@ -35,6 +35,9 @@ int llvm_calc(void);
>> // disassemble.c
>> int llvm_disassemble(void);
>>
>> +// debuginfo.c
>> +int llvm_test_dibuilder(void);
>> +
>> // metadata.c
>> int llvm_add_named_metadata_operand(void);
>> int llvm_set_metadata(void);
>>
>> Modified: llvm/trunk/tools/llvm-c-test/main.c
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-c-test/main.c?rev=317135&r1=317134&r2=317135&view=diff
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-c-test/main.c (original)
>> +++ llvm/trunk/tools/llvm-c-test/main.c Wed Nov 1 15:18:52 2017
>> @@ -55,6 +55,9 @@ static void print_usage(void) {
>> fprintf(stderr, " * --test-diagnostic-handler\n");
>> fprintf(stderr,
>> " Read bitcode file form stdin with a diagnostic handler set\n\n");
>> + fprintf(stderr, " * --test-dibuilder\n");
>> + fprintf(stderr,
>> + " Run tests for the DIBuilder C API - print generated module\n\n");
>> }
>>
>> int main(int argc, char **argv) {
>> @@ -96,6 +99,8 @@ int main(int argc, char **argv) {
>> return llvm_echo();
>> } else if (argc == 2 && !strcmp(argv[1], "--test-diagnostic-handler")) {
>> return llvm_test_diagnostic_handler();
>> + } else if (argc == 2 && !strcmp(argv[1], "--test-dibuilder")) {
>> + return llvm_test_dibuilder();
>> } else {
>> print_usage();
>> }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list