/* Check some aspects of the use of the VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE and VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE macros. */ #include <stdio.h> #include <stdlib.h> #include "../memcheck.h" int main ( void ) { volatile int* volatile mem = (volatile int* volatile)malloc(1000 * sizeof(int)); free((void*)mem); // Check that we get an invalid access complaint fprintf(stderr, "\nDoing invalid access. Expect complaint.\n\n"); mem[123] = 0; // Now disable error reporting in the range fprintf(stderr, "\nDisabling address error reporting for the range.\n\n"); VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE(mem, 1000 * sizeof(int)); // Check that we get an invalid access complaint fprintf(stderr, "\nDoing invalid another access. Expect no complaint.\n\n"); mem[456] = 0; // Re-enable reporting on the first byte of one word from the ignore range fprintf(stderr, "\nPartially reenabling address error reporting.\n\n"); VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE(&mem[789], 1); // Check that we get an invalid access complaint fprintf(stderr, "\nDoing a third access. Expect complaint.\n\n"); mem[789] = 0; // And now quit and expect to see a warning about two remaining ranges fprintf(stderr, "\nExiting. Expect warnings of 2 remaining ranges.\n\n"); return 0; }