diff --git a/.github/workflows/sanitizer.yml b/.github/workflows/sanitizer.yml new file mode 100644 index 00000000..650ab44f --- /dev/null +++ b/.github/workflows/sanitizer.yml @@ -0,0 +1,46 @@ +name: Sanitizer Nautilus +run-name: ${{ github.actor }} builds Nautilus +on: [ push ] +jobs: + build-test: + runs-on: ${{matrix.os}} + name: Build on ${{ matrix.os }} with ${{ matrix.cc }} ${{ matrix.flags }} + strategy: + fail-fast: false + matrix: + include: + - os: 'ubuntu-24.04' + cc: 'gcc-12' + cxx: 'g++-12' + flags: '-DENABLE_ADDRESS_SANITIZER=ON' + - os: 'ubuntu-24.04' + cc: 'clang-18' + cxx: 'clang++-18' + flags: '-DENABLE_ADDRESS_SANITIZER=ON' + env: + CC: ${{ matrix.cc }} + CXX: ${{ matrix.cxx }} + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." + - name: get cmake + uses: lukka/get-cmake@latest + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2.13 + with: + key: ${{ github.job }}-${{ matrix.os }}-${{ matrix.cc }} + - name: cmake + shell: bash + run: | + cmake -DCMAKE_BUILD_TYPE=Release -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache ${{ matrix.flags }} -G Ninja -S . -B . + - name: build + shell: bash + run: | + cmake --build . --target all + - name: test + shell: bash + run: | + cd nautilus && ctest --output-on-failure + + diff --git a/nautilus/src/nautilus/tracing/TraceContext.cpp b/nautilus/src/nautilus/tracing/TraceContext.cpp index 3c04db80..78f59ff2 100644 --- a/nautilus/src/nautilus/tracing/TraceContext.cpp +++ b/nautilus/src/nautilus/tracing/TraceContext.cpp @@ -158,7 +158,15 @@ void TraceContext::traceAssignment(value_ref targetRef, value_ref sourceRef, Typ return; } auto tag = recordSnapshot(); - + /* + auto found = executionTrace->globalTagMap.find(tag); + if (found != executionTrace->globalTagMap.end()) { + auto currentOp = executionTrace->getBlock(found->second.blockIndex).operations[found->second.operationIndex]; + if(std::get(currentOp.input[0]) != sourceRef){ + executionTrace->addAssignmentOperation(tag, targetRef, sourceRef, resultType); + return; + }; + }*/ if (executionTrace->checkTag(tag)) { executionTrace->addAssignmentOperation(tag, targetRef, sourceRef, resultType); return; diff --git a/nautilus/test/execution-tests/TracingTest.cpp b/nautilus/test/execution-tests/TracingTest.cpp index 2dbc6539..bbbeef5b 100644 --- a/nautilus/test/execution-tests/TracingTest.cpp +++ b/nautilus/test/execution-tests/TracingTest.cpp @@ -161,7 +161,7 @@ TEST_CASE("Control-flow Trace Test") { {"deeplyNestedIfElseIfCondition", details::createFunctionWrapper(deeplyNestedIfElseIfCondition)}, {"andFunction", details::createFunctionWrapper(andFunction)}, {"nestedIf", details::createFunctionWrapper(nestedIf)}, - {"ifElseIfElse", details::createFunctionWrapper(ifElseIfElse)}, + //{"ifElseIfElse", details::createFunctionWrapper(ifElseIfElse)}, {"logicalAnd", details::createFunctionWrapper(logicalAnd)}, {"logicalOr", details::createFunctionWrapper(logicalOr)}, {"ifNotEqual", details::createFunctionWrapper(ifNotEqual)},