//===-- klee_overshift_check.c ---------------------------------------------===// // // The KLEE Symbolic Virtual Machine // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "klee/klee.h" /* This instrumentation call is used to check for overshifting. * If we do try to do x << y or x >> y * where * bitWidth = sizeof(x)*8 * shift = y * * then we can detect overshifting (which has undefined behaviour). */ void klee_overshift_check(unsigned long long bitWidth, unsigned long long shift) { if (shift >= bitWidth) { /* Maybe we shouldn't throw an error because * overshifting can be non-fatal? Perhaps * we should generate a test case but carry * on executing the state with a warning? */ klee_report_error("IGNORED", 0 /*Ignored */, "overshift error", "overshift.err"); } }