X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/149c63f36e15b8500b1e826bda5138318ff7ba2b..3cf7d641b2d601a49f505e817dc50fdd97c2d975:/teshsuite/mc/random-bug/random-bug.cpp diff --git a/teshsuite/mc/random-bug/random-bug.cpp b/teshsuite/mc/random-bug/random-bug.cpp index 76cc5975db..80b910eed4 100644 --- a/teshsuite/mc/random-bug/random-bug.cpp +++ b/teshsuite/mc/random-bug/random-bug.cpp @@ -1,8 +1,9 @@ -/* Copyright (c) 2014-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2014-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include #include #include #include @@ -10,21 +11,30 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(random_bug, "For this example"); -enum { ABORT, ASSERT, PRINTF } behavior; +enum class Behavior { ABORT, ASSERT, PRINTF, SEGV }; + +Behavior behavior; /** A fake application with a bug occurring for some random values */ static void app() { int x = MC_random(0, 5); int y = MC_random(0, 5); + XBT_DEBUG("got %d %d", x, y); - if (behavior == ASSERT) { + if (behavior == Behavior::ASSERT) { MC_assert(x != 3 || y != 4); - } else if (behavior == PRINTF) { + } else if (behavior == Behavior::PRINTF) { if (x == 3 && y == 4) XBT_ERROR("Error reached"); - } else { // behavior == ABORT - abort(); + } else if (behavior == Behavior::ABORT) { + if (x == 3 && y == 4) + abort(); + } else if (behavior == Behavior::SEGV) { + if (x == 3 && y == 4) + raise(SIGSEGV); // Simulate a segfault without displeasing the static analyzers + } else { + DIE_IMPOSSIBLE; } } @@ -32,23 +42,26 @@ static void app() int main(int argc, char* argv[]) { simgrid::s4u::Engine e(&argc, argv); - xbt_assert(argc == 3, "Usage: random-bug raise|assert "); + xbt_assert(argc == 3, "Usage: random-bug abort|assert|printf|segv "); if (strcmp(argv[1], "abort") == 0) { XBT_INFO("Behavior: abort"); - behavior = ABORT; + behavior = Behavior::ABORT; } else if (strcmp(argv[1], "assert") == 0) { XBT_INFO("Behavior: assert"); - behavior = ASSERT; + behavior = Behavior::ASSERT; } else if (strcmp(argv[1], "printf") == 0) { XBT_INFO("Behavior: printf"); - behavior = PRINTF; + behavior = Behavior::PRINTF; + } else if (strcmp(argv[1], "segv") == 0) { + XBT_INFO("Behavior: segv"); + behavior = Behavior::SEGV; } else { - xbt_die("Please use either 'abort', 'assert' or 'printf' as first parameter, to specify what to do when the error " - "is found."); + xbt_die("Please use either 'abort', 'assert', 'printf', or 'segv' as first parameter," + " to specify what to do when the error is found."); } e.load_platform(argv[2]); - simgrid::s4u::Actor::create("app", simgrid::s4u::Host::by_name("Fafard"), &app); + simgrid::s4u::Actor::create("app", e.host_by_name("Fafard"), &app); e.run(); }