summaryrefslogtreecommitdiff
path: root/test/example/debug-location-propagation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/example/debug-location-propagation.cpp')
-rw-r--r--test/example/debug-location-propagation.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/example/debug-location-propagation.cpp b/test/example/debug-location-propagation.cpp
new file mode 100644
index 000000000..b4685e391
--- /dev/null
+++ b/test/example/debug-location-propagation.cpp
@@ -0,0 +1,47 @@
+#include <cassert>
+#include <iostream>
+
+#include <binaryen-c.h>
+#include <wasm.h>
+
+int main() {
+ BinaryenModuleRef module = BinaryenModuleCreate();
+
+ BinaryenType ii[2] = {BinaryenTypeInt32(), BinaryenTypeInt32()};
+ BinaryenType params = BinaryenTypeCreate(ii, 2);
+ BinaryenType results = BinaryenTypeNone();
+
+ BinaryenExpressionRef x = BinaryenLocalGet(module, 0, BinaryenTypeInt32()),
+ y = BinaryenLocalGet(module, 1, BinaryenTypeInt32());
+ BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAddInt32(), x, y);
+ BinaryenExpressionRef drop = BinaryenDrop(module, add);
+ BinaryenExpressionRef funcBody =
+ BinaryenBlock(module, "", &drop, 1, BinaryenTypeNone());
+
+ BinaryenFunctionRef adder =
+ BinaryenAddFunction(module, "adder", params, results, NULL, 0, funcBody);
+
+ BinaryenModuleAddDebugInfoFileName(module, "main");
+
+ BinaryenFunctionSetDebugLocation(adder, x, 0, 2, 13);
+ BinaryenFunctionSetDebugLocation(adder, drop, 0, 2, 2);
+
+ BinaryenModuleValidate(module);
+ BinaryenSetDebugInfo(true);
+ const char* runPasses[] = {"propagate-debug-locs"};
+ BinaryenModuleRunPasses(module, runPasses, 1);
+
+ auto& debugLocations = module->getFunction("adder")->debugLocations;
+ assert(debugLocations.size() == 4);
+ assert(debugLocations[x].columnNumber == 13);
+ assert(debugLocations[y].columnNumber == 13);
+ assert(debugLocations[add].columnNumber == 2);
+ assert(debugLocations[drop].columnNumber == 2);
+
+ BinaryenSetDebugInfo(false);
+ BinaryenModuleDispose(module);
+
+ std::cout << "success." << std::endl;
+
+ return 0;
+}