err_disable1.c revision 8f943afc22a6a683b78271836c8ddc462b4824a9
1 2/* Test simple use of the disable/enable macros. */ 3 4#include <stdlib.h> 5#include <stdio.h> 6 7#include "../include/valgrind.h" 8 9char* block = NULL; 10 11__attribute__((noinline)) void usechar ( char c ) 12{ 13 // Spook gcc into believing mysterious bad things are 14 // happening behind its back, and that 'c' is definitely 15 // used in some (unknown) way. 16 __asm__ __volatile__("" : : "r"(c) : "memory","cc"); 17} 18 19__attribute__((noinline)) void err ( void ) 20{ 21 usechar( block[5] ); 22} 23 24int main ( void ) 25{ 26 block = malloc(10); 27 free(block); 28 29 fprintf(stderr, "\n--------- SIMPLE TEST ---------\n\n"); 30 fprintf(stderr, "\n--------- enabled (expect 1) ---------\n\n"); 31 32 err(); 33 34 fprintf(stderr, "\n--------- disabled (expect 0) ---------\n\n"); 35 VALGRIND_DISABLE_ERROR_REPORTING; 36 37 err(); 38 39 fprintf(stderr, "\n--------- re-enabled (expect 1) ---------\n\n"); 40 VALGRIND_ENABLE_ERROR_REPORTING; 41 42 err(); 43 44 45 46 fprintf(stderr, "\n--------- MULTI-LEVEL TEST (expect 2) ---------\n\n"); 47 48 // 4 times 49 VALGRIND_DISABLE_ERROR_REPORTING; 50 VALGRIND_DISABLE_ERROR_REPORTING; 51 VALGRIND_DISABLE_ERROR_REPORTING; 52 VALGRIND_DISABLE_ERROR_REPORTING; // lev = 4 53 54 // now gradually undo them until an error appears 55 err(); // hidden 56 57 VALGRIND_ENABLE_ERROR_REPORTING; // lev = 3 58 err(); // hidden 59 60 VALGRIND_ENABLE_ERROR_REPORTING; // lev = 2 61 err(); // hidden 62 63 VALGRIND_ENABLE_ERROR_REPORTING; // lev = 1 64 err(); // hidden 65 66 VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0 67 err(); // visible 68 69 VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0 (won't go down further) 70 err(); // visible 71 72 fprintf(stderr, "\n--------- MULTI-LEVEL TEST end ---------\n\n"); 73 74 return 0; 75} 76