aboutsummaryrefslogtreecommitdiff
path: root/backend/unittests/CodeGen/CompilationUnitTest.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 17:37:42 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 17:37:42 +0800
commit6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0 (patch)
treef363c502f0e2b9cda2f12928049275a433db6ad4 /backend/unittests/CodeGen/CompilationUnitTest.cpp
parentadcf8c9b1bd1b47e00bf859693112cea1f7e8c9f (diff)
downloadrcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.gz
rcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.xz
[MIR] Accept fixed-baseline LLVM syntax
Diffstat (limited to 'backend/unittests/CodeGen/CompilationUnitTest.cpp')
-rw-r--r--backend/unittests/CodeGen/CompilationUnitTest.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/backend/unittests/CodeGen/CompilationUnitTest.cpp b/backend/unittests/CodeGen/CompilationUnitTest.cpp
index a31c9a8..141d6db 100644
--- a/backend/unittests/CodeGen/CompilationUnitTest.cpp
+++ b/backend/unittests/CodeGen/CompilationUnitTest.cpp
@@ -19,29 +19,34 @@ int fail(const char *Message) {
int main() {
rcc::CompilationUnit Unit;
- auto Empty = Unit.createMachineFunction("");
- if (Empty || Unit.functionCount() != 0)
- return fail("CompilationUnit must reject an empty function name atomically");
+ auto FirstAnonymous = Unit.createMachineFunction("");
+ auto SecondAnonymous = Unit.createMachineFunction("");
+ if (!FirstAnonymous || !SecondAnonymous || Unit.functionCount() != 2 ||
+ (*FirstAnonymous)->stableID().value() != 1 || (*SecondAnonymous)->stableID().value() != 2 ||
+ Unit.function("") != nullptr)
+ return fail("CompilationUnit must retain anonymous functions by order and StableID");
auto First = Unit.createMachineFunction("first");
- if (!First || (*First)->stableID().value() != 1)
+ if (!First || (*First)->stableID().value() != 3)
return fail("CompilationUnit must allocate the first stable function identity");
auto Duplicate = Unit.createMachineFunction("first");
- if (Duplicate || Unit.functionCount() != 1)
+ if (Duplicate || Unit.functionCount() != 3)
return fail("CompilationUnit must reject duplicate function names atomically");
auto Second = Unit.createMachineFunction("second");
- if (!Second || (*Second)->stableID().value() != 2)
+ if (!Second || (*Second)->stableID().value() != 4)
return fail("Rejected function creation must not consume a StableID");
- if (Unit.functionCount() != 2 || Unit.functionAt(0) != *First || Unit.functionAt(1) != *Second)
+ if (Unit.functionCount() != 4 || Unit.functionAt(0) != *FirstAnonymous ||
+ Unit.functionAt(1) != *SecondAnonymous || Unit.functionAt(2) != *First ||
+ Unit.functionAt(3) != *Second)
return fail("CompilationUnit must preserve function document order");
if (Unit.function("first") != *First || Unit.function("missing") != nullptr)
return fail("CompilationUnit must provide exact name lookup");
if (Unit.function((*Second)->stableID()) != *Second ||
Unit.function(rcc::MachineFunctionStableID::fromValue(99)) != nullptr)
return fail("CompilationUnit must provide exact StableID lookup");
- if (Unit.functionAt(2) != nullptr)
+ if (Unit.functionAt(4) != nullptr)
return fail("CompilationUnit must reject an out-of-range ordered lookup");
auto Zero = rcc::GlobalInitializer::zeroFill(4);
@@ -58,7 +63,7 @@ int main() {
return fail("CompilationUnit must own and index global objects");
auto ConflictingFunction = Unit.createMachineFunction("global");
- if (ConflictingFunction || Unit.functionCount() != 2)
+ if (ConflictingFunction || Unit.functionCount() != 4)
return fail("CompilationUnit must reject function/global symbol conflicts atomically");
rcc::GlobalObjectDesc ConflictingGlobal;
@@ -88,7 +93,8 @@ int main() {
return fail("A valid CompilationUnit must pass verification");
rcc::CompilationUnit Moved = std::move(Unit);
- if (Moved.functionCount() != 2 || Moved.function("first") != *First ||
+ if (Moved.functionCount() != 4 || Moved.functionAt(0) != *FirstAnonymous ||
+ Moved.functionAt(1) != *SecondAnonymous || Moved.function("first") != *First ||
Moved.function("second") != *Second || Moved.globalObject("global") != *Global)
return fail("Moving a CompilationUnit must preserve owned object addresses and indices");
Verification = Moved.verify();