aboutsummaryrefslogtreecommitdiff
path: root/backend/unittests/MIR
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 00:49:51 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 00:49:51 +0800
commitdeb6a9e08397083a8d23cac4cfba94345419b443 (patch)
tree9be80ca7db7af178bf7195bcaf060b1f8f833122 /backend/unittests/MIR
parent128a7dbac4cdb1594b3dac9144cf044695ef2ad9 (diff)
downloadrcc-project-deb6a9e08397083a8d23cac4cfba94345419b443.tar.gz
rcc-project-deb6a9e08397083a8d23cac4cfba94345419b443.tar.xz
[MIR] Ignore empty YAML documents
Diffstat (limited to 'backend/unittests/MIR')
-rw-r--r--backend/unittests/MIR/MIRDocumentTest.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/backend/unittests/MIR/MIRDocumentTest.cpp b/backend/unittests/MIR/MIRDocumentTest.cpp
index 5855f57..88f92bc 100644
--- a/backend/unittests/MIR/MIRDocumentTest.cpp
+++ b/backend/unittests/MIR/MIRDocumentTest.cpp
@@ -513,6 +513,36 @@ void testDocumentTransaction(TestContext &Context) {
"printer must reject output that omits required embedded LLVM IR");
}
+void testEmptyYAMLDocuments(TestContext &Context) {
+ auto Target = createTarget();
+ if (!Target)
+ return;
+
+ constexpr std::string_view Boundary = "\n---\nname: documented";
+ std::string WithEmptyDocuments(ValidDocument);
+ const std::size_t BoundaryPosition = WithEmptyDocuments.find(Boundary);
+ Context.expect(BoundaryPosition != std::string::npos,
+ "MIR empty-document fixture must find its document boundary");
+ if (BoundaryPosition == std::string::npos)
+ return;
+ WithEmptyDocuments.replace(BoundaryPosition, Boundary.size(), "\n---\n---\nname: documented");
+ WithEmptyDocuments.insert(0, "---\n");
+ WithEmptyDocuments.append("\n...\n---\n");
+ auto Parsed =
+ rcc::mir::parseMIRDocument(*Target, "empty-documents.mir", std::move(WithEmptyDocuments));
+ Context.expect(Parsed.succeeded() && Parsed.document() != nullptr &&
+ Parsed.document()->unit().functionCount() == 1,
+ "MIR must ignore leading, intermediate, and trailing empty YAML documents");
+ if (!Parsed.succeeded())
+ printDiagnostics(Parsed);
+
+ std::string ExplicitNull(ValidDocument);
+ ExplicitNull.replace(BoundaryPosition, Boundary.size(), "\n---\nnull\n---\nname: documented");
+ auto Rejected = rcc::mir::parseMIRDocument(*Target, "explicit-null.mir", std::move(ExplicitNull));
+ Context.expect(!Rejected.succeeded(),
+ "MIR must not treat an explicit null document as an empty separator");
+}
+
void testHeterogeneousPointerLayout(TestContext &Context) {
auto Target = createTarget();
Context.expect(Target.has_value(), "heterogeneous-layout target must be valid");
@@ -1028,6 +1058,7 @@ body: |
int main() {
TestContext Context;
testDocumentTransaction(Context);
+ testEmptyYAMLDocuments(Context);
testHeterogeneousPointerLayout(Context);
testEmbeddedReferenceValidation(Context);
testReferencesWithoutEmbeddedIR(Context);