[PATCH] D55390: [llvm-tapi] Don't override SequenceTraits for std::string

Armando Montanez via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 6 15:15:21 PST 2018


amontanez created this revision.
amontanez added reviewers: jakehehrlich, phosek, sbc100.
Herald added subscribers: llvm-commits, hiraditya, arichardson, emaste.
Herald added a reviewer: espindola.
amontanez edited the summary of this revision.

Change the ELF YAML implementation of TextAPI so NeededLibs uses flow
sequence vector correctly instead of overriding the YAML implementation
for std::vector<std::string>>.

This should fix the test failure with the LLVM_LINK_LLVM_DYLIB build mentioned in D55381 <https://reviews.llvm.org/D55381>.

Still passes existing tests that cover this.


Repository:
  rL LLVM

https://reviews.llvm.org/D55390

Files:
  llvm/lib/TextAPI/ELF/TBEHandler.cpp


Index: llvm/lib/TextAPI/ELF/TBEHandler.cpp
===================================================================
--- llvm/lib/TextAPI/ELF/TBEHandler.cpp
+++ llvm/lib/TextAPI/ELF/TBEHandler.cpp
@@ -18,6 +18,8 @@
 using namespace llvm::elfabi;
 
 LLVM_YAML_STRONG_TYPEDEF(ELFArch, ELFArchMapper)
+LLVM_YAML_STRONG_TYPEDEF(std::string, ELFNeededEntry)
+LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(ELFNeededEntry)
 
 namespace llvm {
 namespace yaml {
@@ -126,21 +128,23 @@
   }
 };
 
-/// YAML traits for generic string vectors (i.e. list of needed libraries).
-template <> struct SequenceTraits<std::vector<std::string>> {
-  static size_t size(IO &IO, std::vector<std::string> &List) {
-    return List.size();
+/// YAML traits for ELFNeededEntry. This is required to enable flow mapping on
+/// NeededLibs.
+template <> struct ScalarTraits<ELFNeededEntry> {
+  static void output(const ELFNeededEntry &Value, void *,
+                     llvm::raw_ostream &Out) {
+    Out << Value.value;
   }
 
-  static std::string &element(IO &IO, std::vector<std::string> &List,
-                              size_t Index) {
-    if (Index >= List.size())
-      List.resize(Index + 1);
-    return List[Index];
+  static StringRef input(StringRef Scalar, void *, ELFNeededEntry &Value) {
+    Value = Scalar.str();
+
+    // Returning empty StringRef indicates successful parse.
+    return StringRef();
   }
 
-  // Compacts list of needed libraries into a single line.
-  static const bool flow = true;
+  // Don't place quotation marks around needed entries.
+  static QuotingType mustQuote(StringRef) { return QuotingType::None; }
 };
 
 /// YAML traits for ELFStub objects.
@@ -151,7 +155,8 @@
     IO.mapRequired("TbeVersion", Stub.TbeVersion);
     IO.mapRequired("SoName", Stub.SoName);
     IO.mapRequired("Arch", (ELFArchMapper &)Stub.Arch);
-    IO.mapOptional("NeededLibs", Stub.NeededLibs);
+    IO.mapOptional("NeededLibs",
+                   (std::vector<ELFNeededEntry> &)Stub.NeededLibs);
     IO.mapRequired("Symbols", Stub.Symbols);
   }
 };


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55390.177064.patch
Type: text/x-patch
Size: 2041 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181206/1f9d5c93/attachment.bin>


More information about the llvm-commits mailing list