1eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 2eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov/* Check some aspects of the use of the 3eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE and 4eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE macros. */ 5eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 6eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov#include <stdio.h> 7eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov#include <stdlib.h> 8eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 9eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov#include "../memcheck.h" 10eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 11eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanovint main ( void ) 12eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov{ 13eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov volatile int* volatile mem 14eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov = (volatile int* volatile)malloc(1000 * sizeof(int)); 15eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov free((void*)mem); 16eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 17eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov // Check that we get an invalid access complaint 18eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov fprintf(stderr, "\nDoing invalid access. Expect complaint.\n\n"); 19eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov mem[123] = 0; 20eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 21eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov // Now disable error reporting in the range 22eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov fprintf(stderr, "\nDisabling address error reporting for the range.\n\n"); 23eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE(mem, 1000 * sizeof(int)); 24eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 25eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov // Check that we get an invalid access complaint 26eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov fprintf(stderr, "\nDoing invalid another access. Expect no complaint.\n\n"); 27eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov mem[456] = 0; 28eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 29eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov // Re-enable reporting on the first byte of one word from the ignore range 30eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov fprintf(stderr, "\nPartially reenabling address error reporting.\n\n"); 31eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE(&mem[789], 1); 32eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 33eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov // Check that we get an invalid access complaint 34eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov fprintf(stderr, "\nDoing a third access. Expect complaint.\n\n"); 35eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov mem[789] = 0; 36eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 37eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov // And now quit and expect to see a warning about two remaining ranges 38eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov fprintf(stderr, "\nExiting. Expect warnings of 2 remaining ranges.\n\n"); 39eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 40eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov return 0; 41eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov} 42