r373406 - Use scope qualifiers in Clang's tblgen backends to get useful

John McCall via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 3 14:26:12 PDT 2019


On 3 Oct 2019, at 17:22, David Blaikie wrote:
> (mostly joking) any interest in seeing what it'd take to make 
> Clang/LLVM
> -Wmissing-prototype clean? (which would also catch the same sort of 
> issues,
> I think?)

Sounds like a nice project for someone else. :)

John.

>
> On Tue, Oct 1, 2019 at 4:10 PM John McCall via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: rjmccall
>> Date: Tue Oct  1 16:12:57 2019
>> New Revision: 373406
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=373406&view=rev
>> Log:
>> Use scope qualifiers in Clang's tblgen backends to get useful
>> redeclaration checking.  NFC.
>>
>> Modified:
>>     cfe/trunk/utils/TableGen/ClangASTNodesEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangCommentCommandInfoEmitter.cpp
>>
>> cfe/trunk/utils/TableGen/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangDataCollectorsEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangOpcodesEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangOptionDocEmitter.cpp
>>     cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp
>>     cfe/trunk/utils/TableGen/NeonEmitter.cpp
>>
>> Modified: cfe/trunk/utils/TableGen/ClangASTNodesEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangASTNodesEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangASTNodesEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/ClangASTNodesEmitter.cpp Tue Oct  1 
>> 16:12:57
>> 2019
>> @@ -10,6 +10,8 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>> +
>>  #include "llvm/TableGen/Record.h"
>>  #include "llvm/TableGen/TableGenBackend.h"
>>  #include <cctype>
>> @@ -173,15 +175,14 @@ void ClangASTNodesEmitter::run(raw_ostre
>>    OS << "#undef ABSTRACT_" << macroName(Root.getName()) << "\n";
>>  }
>>
>> -namespace clang {
>> -void EmitClangASTNodes(RecordKeeper &RK, raw_ostream &OS,
>> -                       const std::string &N, const std::string &S) {
>> +void clang::EmitClangASTNodes(RecordKeeper &RK, raw_ostream &OS,
>> +                              const std::string &N, const 
>> std::string &S)
>> {
>>    ClangASTNodesEmitter(RK, N, S).run(OS);
>>  }
>>
>>  // Emits and addendum to a .inc file to enumerate the clang 
>> declaration
>>  // contexts.
>> -void EmitClangDeclContext(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitClangDeclContext(RecordKeeper &Records, raw_ostream 
>> &OS) {
>>    // FIXME: Find a .td file format to allow for this to be 
>> represented
>> better.
>>
>>    emitSourceFileHeader("List of AST Decl nodes", OS);
>> @@ -225,4 +226,3 @@ void EmitClangDeclContext(RecordKeeper &
>>    OS << "#undef DECL_CONTEXT\n";
>>    OS << "#undef DECL_CONTEXT_BASE\n";
>>  }
>> -} // end namespace clang
>>
>> Modified: cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp Tue Oct  1 16:12:57 
>> 2019
>> @@ -10,6 +10,8 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>> +
>>  #include "llvm/ADT/ArrayRef.h"
>>  #include "llvm/ADT/DenseMap.h"
>>  #include "llvm/ADT/DenseSet.h"
>> @@ -2219,10 +2221,8 @@ static void emitClangAttrThisIsaIdentifi
>>    OS << "#endif // CLANG_ATTR_THIS_ISA_IDENTIFIER_ARG_LIST\n\n";
>>  }
>>
>> -namespace clang {
>> -
>>  // Emits the class definitions for attributes.
>> -void EmitClangAttrClass(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitClangAttrClass(RecordKeeper &Records, raw_ostream 
>> &OS) {
>>    emitSourceFileHeader("Attribute classes' definitions", OS);
>>
>>    OS << "#ifndef LLVM_CLANG_ATTR_CLASSES_INC\n";
>> @@ -2491,7 +2491,7 @@ void EmitClangAttrClass(RecordKeeper &Re
>>  }
>>
>>  // Emits the class method definitions for attributes.
>> -void EmitClangAttrImpl(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitClangAttrImpl(RecordKeeper &Records, raw_ostream 
>> &OS) {
>>    emitSourceFileHeader("Attribute classes' member function 
>> definitions",
>> OS);
>>
>>    std::vector<Record*> Attrs = 
>> Records.getAllDerivedDefinitions("Attr");
>> @@ -2556,8 +2556,6 @@ void EmitClangAttrImpl(RecordKeeper &Rec
>>    EmitFunc("printPretty(OS, Policy)");
>>  }
>>
>> -} // end namespace clang
>> -
>>  static void emitAttrList(raw_ostream &OS, StringRef Class,
>>                           const std::vector<Record*> &AttrList) {
>>    for (auto Cur : AttrList) {
>>
>> Modified: cfe/trunk/utils/TableGen/ClangCommentCommandInfoEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangCommentCommandInfoEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangCommentCommandInfoEmitter.cpp 
>> (original)
>> +++ cfe/trunk/utils/TableGen/ClangCommentCommandInfoEmitter.cpp Tue 
>> Oct  1
>> 16:12:57 2019
>> @@ -11,6 +11,8 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>> +
>>  #include "llvm/TableGen/Record.h"
>>  #include "llvm/TableGen/StringMatcher.h"
>>  #include "llvm/TableGen/TableGenBackend.h"
>> @@ -18,8 +20,7 @@
>>
>>  using namespace llvm;
>>
>> -namespace clang {
>> -void EmitClangCommentCommandInfo(RecordKeeper &Records, raw_ostream 
>> &OS) {
>> +void clang::EmitClangCommentCommandInfo(RecordKeeper &Records,
>> raw_ostream &OS) {
>>    emitSourceFileHeader("A list of commands useable in documentation 
>> "
>>                         "comments", OS);
>>
>> @@ -105,7 +106,7 @@ static std::string MangleName(StringRef
>>    return Mangled;
>>  }
>>
>> -void EmitClangCommentCommandList(RecordKeeper &Records, raw_ostream 
>> &OS) {
>> +void clang::EmitClangCommentCommandList(RecordKeeper &Records,
>> raw_ostream &OS) {
>>    emitSourceFileHeader("A list of commands useable in documentation 
>> "
>>                         "comments", OS);
>>
>> @@ -121,4 +122,3 @@ void EmitClangCommentCommandList(RecordK
>>      OS << "COMMENT_COMMAND(" << MangledName << ")\n";
>>    }
>>  }
>> -} // end namespace clang
>>
>> Modified:
>> cfe/trunk/utils/TableGen/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> ---
>> cfe/trunk/utils/TableGen/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp
>> (original)
>> +++
>> cfe/trunk/utils/TableGen/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp
>> Tue Oct  1 16:12:57 2019
>> @@ -11,6 +11,7 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>>  #include "llvm/ADT/SmallString.h"
>>  #include "llvm/Support/ConvertUTF.h"
>>  #include "llvm/TableGen/Error.h"
>> @@ -45,9 +46,8 @@ static bool translateCodePointToUTF8(uns
>>    return true;
>>  }
>>
>> -namespace clang {
>> -void EmitClangCommentHTMLNamedCharacterReferences(RecordKeeper 
>> &Records,
>> -                                                  raw_ostream &OS) {
>> +void 
>> clang::EmitClangCommentHTMLNamedCharacterReferences(RecordKeeper
>> &Records,
>> +                                                         raw_ostream 
>> &OS)
>> {
>>    std::vector<Record *> Tags = 
>> Records.getAllDerivedDefinitions("NCR");
>>    std::vector<StringMatcher::StringPair> NameToUTF8;
>>    SmallString<32> CLiteral;
>> @@ -79,6 +79,3 @@ void EmitClangCommentHTMLNamedCharacterR
>>    OS << "  return StringRef();\n"
>>       << "}\n\n";
>>  }
>> -
>> -} // end namespace clang
>> -
>>
>> Modified: cfe/trunk/utils/TableGen/ClangDataCollectorsEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangDataCollectorsEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangDataCollectorsEmitter.cpp 
>> (original)
>> +++ cfe/trunk/utils/TableGen/ClangDataCollectorsEmitter.cpp Tue Oct  
>> 1
>> 16:12:57 2019
>> @@ -1,10 +1,10 @@
>> +#include "TableGenBackends.h"
>>  #include "llvm/TableGen/Record.h"
>>  #include "llvm/TableGen/TableGenBackend.h"
>>
>>  using namespace llvm;
>>
>> -namespace clang {
>> -void EmitClangDataCollectors(RecordKeeper &RK, raw_ostream &OS) {
>> +void clang::EmitClangDataCollectors(RecordKeeper &RK, raw_ostream 
>> &OS) {
>>    const auto &Defs = RK.getClasses();
>>    for (const auto &Entry : Defs) {
>>      Record &R = *Entry.second;
>> @@ -15,4 +15,3 @@ void EmitClangDataCollectors(RecordKeepe
>>    }
>>    OS << "#undef DEF_ADD_DATA\n";
>>  }
>> -} // end namespace clang
>>
>> Modified: cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Tue Oct  1
>> 16:12:57 2019
>> @@ -10,6 +10,7 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>>  #include "llvm/ADT/DenseSet.h"
>>  #include "llvm/ADT/Optional.h"
>>  #include "llvm/ADT/PointerUnion.h"
>> @@ -1187,9 +1188,8 @@ static bool isRemark(const Record &Diag)
>>
>>  /// ClangDiagsDefsEmitter - The top-level class emits .def files
>> containing
>>  /// declarations of Clang diagnostics.
>> -namespace clang {
>> -void EmitClangDiagsDefs(RecordKeeper &Records, raw_ostream &OS,
>> -                        const std::string &Component) {
>> +void clang::EmitClangDiagsDefs(RecordKeeper &Records, raw_ostream 
>> &OS,
>> +                               const std::string &Component) {
>>    // Write the #if guard
>>    if (!Component.empty()) {
>>      std::string ComponentName = StringRef(Component).upper();
>> @@ -1288,7 +1288,6 @@ void EmitClangDiagsDefs(RecordKeeper &Re
>>      OS << ")\n";
>>    }
>>  }
>> -} // end namespace clang
>>
>>
>>  //===----------------------------------------------------------------------===//
>>  // Warning Group Tables generation
>> @@ -1528,8 +1527,7 @@ static void emitCategoryTable(RecordKeep
>>    OS << "#endif // GET_CATEGORY_TABLE\n\n";
>>  }
>>
>> -namespace clang {
>> -void EmitClangDiagGroups(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitClangDiagGroups(RecordKeeper &Records, raw_ostream 
>> &OS) {
>>    // Compute a mapping from a DiagGroup to all of its parents.
>>    DiagGroupParentMap DGParentMap(Records);
>>
>> @@ -1565,7 +1563,6 @@ void EmitClangDiagGroups(RecordKeeper &R
>>                  OS);
>>    emitCategoryTable(Records, OS);
>>  }
>> -} // end namespace clang
>>
>>
>>  //===----------------------------------------------------------------------===//
>>  // Diagnostic name index generation
>> @@ -1582,8 +1579,7 @@ struct RecordIndexElement
>>  };
>>  } // end anonymous namespace.
>>
>> -namespace clang {
>> -void EmitClangDiagsIndexName(RecordKeeper &Records, raw_ostream &OS) 
>> {
>> +void clang::EmitClangDiagsIndexName(RecordKeeper &Records, 
>> raw_ostream
>> &OS) {
>>    const std::vector<Record*> &Diags =
>>      Records.getAllDerivedDefinitions("Diagnostic");
>>
>> @@ -1673,7 +1669,7 @@ void writeDiagnosticText(DiagnosticTextB
>>  }  // namespace
>>  }  // namespace docs
>>
>> -void EmitClangDiagDocs(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitClangDiagDocs(RecordKeeper &Records, raw_ostream 
>> &OS) {
>>    using namespace docs;
>>
>>    // Get the documentation introduction paragraph.
>> @@ -1792,5 +1788,3 @@ void EmitClangDiagDocs(RecordKeeper &Rec
>>      OS << "\n";
>>    }
>>  }
>> -
>> -} // end namespace clang
>>
>> Modified: cfe/trunk/utils/TableGen/ClangOpcodesEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangOpcodesEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangOpcodesEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/ClangOpcodesEmitter.cpp Tue Oct  1 
>> 16:12:57
>> 2019
>> @@ -10,6 +10,7 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>>  #include "llvm/TableGen/Error.h"
>>  #include "llvm/TableGen/Record.h"
>>  #include "llvm/TableGen/StringMatcher.h"
>> @@ -351,10 +352,6 @@ void ClangOpcodesEmitter::PrintTypes(raw
>>    OS << ">";
>>  }
>>
>> -namespace clang {
>> -
>> -void EmitClangOpcodes(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitClangOpcodes(RecordKeeper &Records, raw_ostream &OS) 
>> {
>>    ClangOpcodesEmitter(Records).run(OS);
>>  }
>> -
>> -} // end namespace clang
>>
>> Modified: cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp Tue Oct  1
>> 16:12:57 2019
>> @@ -50,6 +50,7 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>>  #include "llvm/ADT/MapVector.h"
>>  #include "llvm/ADT/STLExtras.h"
>>  #include "llvm/ADT/SmallString.h"
>> @@ -639,11 +640,7 @@ static void OCL2Qual(ASTContext &Context
>>    OS << "\n} // OCL2Qual\n";
>>  }
>>
>> -namespace clang {
>> -
>> -void EmitClangOpenCLBuiltins(RecordKeeper &Records, raw_ostream &OS) 
>> {
>> +void clang::EmitClangOpenCLBuiltins(RecordKeeper &Records, 
>> raw_ostream
>> &OS) {
>>    BuiltinNameEmitter NameChecker(Records, OS);
>>    NameChecker.Emit();
>>  }
>> -
>> -} // end namespace clang
>>
>> Modified: cfe/trunk/utils/TableGen/ClangOptionDocEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangOptionDocEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangOptionDocEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/ClangOptionDocEmitter.cpp Tue Oct  1 
>> 16:12:57
>> 2019
>> @@ -8,6 +8,7 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>>  #include "llvm/TableGen/Error.h"
>>  #include "llvm/ADT/STLExtras.h"
>>  #include "llvm/ADT/SmallString.h"
>> @@ -21,8 +22,6 @@
>>
>>  using namespace llvm;
>>
>> -namespace clang {
>> -namespace docs {
>>  namespace {
>>  struct DocumentedOption {
>>    Record *Option;
>> @@ -380,11 +379,8 @@ void emitDocumentation(int Depth, const
>>  }
>>
>>  }  // namespace
>> -}  // namespace docs
>> -
>> -void EmitClangOptDocs(RecordKeeper &Records, raw_ostream &OS) {
>> -  using namespace docs;
>>
>> +void clang::EmitClangOptDocs(RecordKeeper &Records, raw_ostream &OS) 
>> {
>>    const Record *DocInfo = Records.getDef("GlobalDocumentation");
>>    if (!DocInfo) {
>>      PrintFatalError("The GlobalDocumentation top-level definition is
>> missing, "
>> @@ -396,4 +392,3 @@ void EmitClangOptDocs(RecordKeeper &Reco
>>
>>    emitDocumentation(0, extractDocumentation(Records), DocInfo, OS);
>>  }
>> -} // end namespace clang
>>
>> Modified: cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/ClangSACheckersEmitter.cpp Tue Oct  1
>> 16:12:57 2019
>> @@ -10,6 +10,7 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>>  #include "llvm/ADT/StringMap.h"
>>  #include "llvm/TableGen/Error.h"
>>  #include "llvm/TableGen/Record.h"
>> @@ -174,8 +175,7 @@ static void printOption(llvm::raw_ostrea
>>      OS << "true";
>>  }
>>
>> -namespace clang {
>> -void EmitClangSACheckers(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitClangSACheckers(RecordKeeper &Records, raw_ostream 
>> &OS) {
>>    std::vector<Record*> checkers =
>> Records.getAllDerivedDefinitions("Checker");
>>    std::vector<Record*> packages =
>> Records.getAllDerivedDefinitions("Package");
>>
>> @@ -315,4 +315,3 @@ void EmitClangSACheckers(RecordKeeper &R
>>    OS << "#endif // GET_CHECKER_OPTIONS\n"
>>          "\n";
>>  }
>> -} // end namespace clang
>>
>> Modified: cfe/trunk/utils/TableGen/NeonEmitter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/NeonEmitter.cpp?rev=373406&r1=373405&r2=373406&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/utils/TableGen/NeonEmitter.cpp (original)
>> +++ cfe/trunk/utils/TableGen/NeonEmitter.cpp Tue Oct  1 16:12:57 2019
>> @@ -23,6 +23,7 @@
>>  //
>>
>>  //===----------------------------------------------------------------------===//
>>
>> +#include "TableGenBackends.h"
>>  #include "llvm/ADT/ArrayRef.h"
>>  #include "llvm/ADT/DenseMap.h"
>>  #include "llvm/ADT/None.h"
>> @@ -2629,22 +2630,18 @@ void NeonEmitter::runFP16(raw_ostream &O
>>    OS << "#endif /* __ARM_FP16_H */\n";
>>  }
>>
>> -namespace clang {
>> -
>> -void EmitNeon(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitNeon(RecordKeeper &Records, raw_ostream &OS) {
>>    NeonEmitter(Records).run(OS);
>>  }
>>
>> -void EmitFP16(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitFP16(RecordKeeper &Records, raw_ostream &OS) {
>>    NeonEmitter(Records).runFP16(OS);
>>  }
>>
>> -void EmitNeonSema(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitNeonSema(RecordKeeper &Records, raw_ostream &OS) {
>>    NeonEmitter(Records).runHeader(OS);
>>  }
>>
>> -void EmitNeonTest(RecordKeeper &Records, raw_ostream &OS) {
>> +void clang::EmitNeonTest(RecordKeeper &Records, raw_ostream &OS) {
>>    llvm_unreachable("Neon test generation no longer implemented!");
>>  }
>> -
>> -} // end namespace clang
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>




More information about the cfe-commits mailing list