diff options
author | Dave Lee <davelee.com@gmail.com> | 2017-11-16 17:46:11 +0000 |
---|---|---|
committer | Dave Lee <davelee.com@gmail.com> | 2017-11-16 17:46:11 +0000 |
commit | c6f2e696958a6eb8c19c0d04dbde0b5c713afb62 (patch) | |
tree | b20eecd1358f03383e3c04cb64631493645b82ba /llvm/lib/Support/YAMLTraits.cpp | |
parent | 8010bf0a9269cbe8b2ce8618a7e8597ea52ae9ec (diff) | |
download | bcm5719-llvm-c6f2e696958a6eb8c19c0d04dbde0b5c713afb62.tar.gz bcm5719-llvm-c6f2e696958a6eb8c19c0d04dbde0b5c713afb62.zip |
Allow empty mappings for optional YAML input
Summary:
This change fixes a bug where `obj2yaml` can in some cases produce YAML that
causes `yaml2obj` to error.
The ELF YAML document structure has a `Sections` mapping, which contains three
mappings, all of which are optional: `Local`, `Global`, and `Weak.` Any one of
these can be missing, but if all three are missing, then `yaml2obj` errors. This
change allows YAML input for cases like this one.
I have tested this with check-llvm and check-lld, and all tests passed.
This change is the result of test failures while working on D39582, which
introduces a `DynamicSymbols` mapping, which will be empty at times.
Reviewers: compnerd, jakehehrlich, silvas, kledzik, mehdi_amini, pcc
Reviewed By: compnerd
Subscribers: silvas, llvm-commits
Differential Revision: https://reviews.llvm.org/D39908
llvm-svn: 318428
Diffstat (limited to 'llvm/lib/Support/YAMLTraits.cpp')
-rw-r--r-- | llvm/lib/Support/YAMLTraits.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Support/YAMLTraits.cpp b/llvm/lib/Support/YAMLTraits.cpp index 75a2224a772..a80adfda830 100644 --- a/llvm/lib/Support/YAMLTraits.cpp +++ b/llvm/lib/Support/YAMLTraits.cpp @@ -160,7 +160,8 @@ bool Input::preflightKey(const char *Key, bool Required, bool, bool &UseDefault, MapHNode *MN = dyn_cast<MapHNode>(CurrentNode); if (!MN) { - setError(CurrentNode, "not a mapping"); + if (Required || !isa<EmptyHNode>(CurrentNode)) + setError(CurrentNode, "not a mapping"); return false; } MN->ValidKeys.push_back(Key); |