[llvm] [llvm-pdbutil] Print error on invalid YAML (PR #207528)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 4 10:28:47 PDT 2026
https://github.com/Nerixyz updated https://github.com/llvm/llvm-project/pull/207528
>From 0f14d167261414b26ffec4b9c6609219a24066e4 Mon Sep 17 00:00:00 2001
From: Nerixyz <nerixdev at outlook.de>
Date: Sat, 4 Jul 2026 18:33:01 +0200
Subject: [PATCH 1/2] [llvm-pdbutil] Print error on invalid YAML
---
llvm/test/tools/llvm-pdbutil/invalid-yaml.test | 10 ++++++++++
llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp | 10 +++++++++-
2 files changed, 19 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/tools/llvm-pdbutil/invalid-yaml.test
diff --git a/llvm/test/tools/llvm-pdbutil/invalid-yaml.test b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
new file mode 100644
index 0000000000000..e650a3d5e72bc
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
@@ -0,0 +1,10 @@
+## Test that we produce an error if the YAML input is invalid.
+# RUN: not llvm-pdbutil yaml2pdb %s --pdb=%t.pdb 2>&1 | FileCheck %s
+
+---
+- A list is not valid
+# CHECK: invalid-yaml.test:[[@LINE-1]]:1: error: not a mapping
+# CHECK-NEXT: - A list
+# CHECK-NEXT: ^
+# CHECK-NEXT: llvm-pdbutil: failed to parse YAML input: invalid argument
+...
diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
index 77aed01ad498f..553866f4e9bc4 100644
--- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
+++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
@@ -819,16 +819,24 @@ static void yamlToPdb(StringRef Path, unsigned DocNum) {
std::unique_ptr<MemoryBuffer> &Buffer = ErrorOrBuffer.get();
- llvm::yaml::Input In(Buffer->getBuffer());
+ llvm::yaml::Input In(
+ Buffer->getMemBufferRef(), nullptr,
+ [](const SMDiagnostic &Diag, void *) { Diag.print(nullptr, errs()); });
+
for (unsigned CurrentDoc = 1; CurrentDoc < DocNum; ++CurrentDoc) {
if (!In.nextDocument())
ExitOnErr(createFileError(
Path, createStringErrorV("cannot find the {0}{1} document", DocNum,
getOrdinalSuffix(DocNum))));
}
+
pdb::yaml::PdbObject YamlObj(Allocator);
In >> YamlObj;
+ if (std::error_code EC = In.error())
+ ExitOnErr(
+ createStringErrorV("failed to parse YAML input: {0}", EC.message()));
+
PDBFileBuilder Builder(Allocator);
uint32_t BlockSize = 4096;
>From 6fe63881f9817e8c408f8ed0964f3eea9e79ce81 Mon Sep 17 00:00:00 2001
From: Nerixyz <nerixdev at outlook.de>
Date: Sat, 4 Jul 2026 19:28:35 +0200
Subject: [PATCH 2/2] fix: don't check error code message (OS dependent)
---
llvm/test/tools/llvm-pdbutil/invalid-yaml.test | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/test/tools/llvm-pdbutil/invalid-yaml.test b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
index e650a3d5e72bc..4f65161c47d4a 100644
--- a/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
+++ b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
@@ -6,5 +6,5 @@
# CHECK: invalid-yaml.test:[[@LINE-1]]:1: error: not a mapping
# CHECK-NEXT: - A list
# CHECK-NEXT: ^
-# CHECK-NEXT: llvm-pdbutil: failed to parse YAML input: invalid argument
+# CHECK-NEXT: llvm-pdbutil: failed to parse YAML input:
...
More information about the llvm-commits
mailing list