1*33224b22SAlex Crichton //! extra-files = ['dwarf_generic_satellite.cc'] 2*33224b22SAlex Crichton 3*33224b22SAlex Crichton // clang-format off 4*33224b22SAlex Crichton // clang -o generic.wasm -target wasm32-unknown-wasip1 -g generic.cpp generic-satellite.cpp 5*33224b22SAlex Crichton // clang-format on 6*33224b22SAlex Crichton // 7*33224b22SAlex Crichton #include "dwarf_generic.h" 8*33224b22SAlex Crichton MainDefinedFunction()9*33224b22SAlex Crichtonint SomeClass::MainDefinedFunction() { 10*33224b22SAlex Crichton int x = HIDE_FROM_CHECKER(1); 11*33224b22SAlex Crichton debug_break(); 12*33224b22SAlex Crichton int y = SatelliteFunction(x); 13*33224b22SAlex Crichton return x + y; 14*33224b22SAlex Crichton } 15*33224b22SAlex Crichton TestClassDefinitionSpreadAcrossCompileUnits()16*33224b22SAlex Crichtonint TestClassDefinitionSpreadAcrossCompileUnits() { 17*33224b22SAlex Crichton int result = SomeClass::MainDefinedFunction(); 18*33224b22SAlex Crichton return result != 3 ? 1 : 0; 19*33224b22SAlex Crichton } 20*33224b22SAlex Crichton 21*33224b22SAlex Crichton struct BaseType { 22*33224b22SAlex Crichton int BaseValue = 1; 23*33224b22SAlex Crichton }; 24*33224b22SAlex Crichton struct DerivedType : BaseType { 25*33224b22SAlex Crichton long long DerivedValue = 2; 26*33224b22SAlex Crichton InstanceMethodDerivedType27*33224b22SAlex Crichton int InstanceMethod() { 28*33224b22SAlex Crichton debug_break(); 29*33224b22SAlex Crichton return BaseValue + DerivedValue; 30*33224b22SAlex Crichton } 31*33224b22SAlex Crichton ConstInstanceMethodDerivedType32*33224b22SAlex Crichton int ConstInstanceMethod() const { 33*33224b22SAlex Crichton debug_break(); 34*33224b22SAlex Crichton return BaseValue + DerivedValue; 35*33224b22SAlex Crichton } 36*33224b22SAlex Crichton }; 37*33224b22SAlex Crichton TestInheritance()38*33224b22SAlex Crichtonint TestInheritance() { 39*33224b22SAlex Crichton DerivedType inst; 40*33224b22SAlex Crichton debug_break(); 41*33224b22SAlex Crichton return inst.BaseValue + inst.DerivedValue != 3 ? 1 : 0; 42*33224b22SAlex Crichton } 43*33224b22SAlex Crichton TestInstanceMethod()44*33224b22SAlex Crichtonint TestInstanceMethod() { 45*33224b22SAlex Crichton debug_break(); 46*33224b22SAlex Crichton 47*33224b22SAlex Crichton DerivedType inst; 48*33224b22SAlex Crichton inst.BaseValue = 2; 49*33224b22SAlex Crichton inst.DerivedValue = 4; 50*33224b22SAlex Crichton if (inst.InstanceMethod() != 6) 51*33224b22SAlex Crichton return 1; 52*33224b22SAlex Crichton 53*33224b22SAlex Crichton inst.BaseValue++; 54*33224b22SAlex Crichton volatile DerivedType volatileInst = inst; 55*33224b22SAlex Crichton if (inst.InstanceMethod() != 7) 56*33224b22SAlex Crichton return 2; 57*33224b22SAlex Crichton 58*33224b22SAlex Crichton inst.DerivedValue++; 59*33224b22SAlex Crichton const DerivedType constInst = inst; 60*33224b22SAlex Crichton if (inst.ConstInstanceMethod() != 8) 61*33224b22SAlex Crichton return 3; 62*33224b22SAlex Crichton 63*33224b22SAlex Crichton return 0; 64*33224b22SAlex Crichton } 65*33224b22SAlex Crichton 66*33224b22SAlex Crichton __asm("FunctionWithoutWasmDWARF:\n" 67*33224b22SAlex Crichton ".global FunctionWithoutWasmDWARF\n" 68*33224b22SAlex Crichton ".functype FunctionWithoutWasmDWARF (i32, i32) -> (i32)\n" 69*33224b22SAlex Crichton "local.get 0\n" 70*33224b22SAlex Crichton "local.get 1\n" 71*33224b22SAlex Crichton "i32.div_u\n" 72*33224b22SAlex Crichton "end_function\n"); 73*33224b22SAlex Crichton extern "C" int FunctionWithoutWasmDWARF(int a, int b); 74*33224b22SAlex Crichton TestFunctionWithoutWasmDWARF()75*33224b22SAlex Crichtonint TestFunctionWithoutWasmDWARF() { 76*33224b22SAlex Crichton debug_break(); 77*33224b22SAlex Crichton int x = FunctionWithoutWasmDWARF(9, 10); 78*33224b22SAlex Crichton return x == 0 ? 0 : 4; 79*33224b22SAlex Crichton } 80*33224b22SAlex Crichton main()81*33224b22SAlex Crichtonint main() { 82*33224b22SAlex Crichton int exitCode = 0; 83*33224b22SAlex Crichton exitCode += TestClassDefinitionSpreadAcrossCompileUnits(); 84*33224b22SAlex Crichton exitCode += TestInheritance(); 85*33224b22SAlex Crichton exitCode += TestInstanceMethod(); 86*33224b22SAlex Crichton exitCode += TestFunctionWithoutWasmDWARF(); 87*33224b22SAlex Crichton return exitCode; 88*33224b22SAlex Crichton } 89