40 lines
		
	
	
		
			672 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			672 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clangxx_msan -O0 -g %s -o %t && %run %t
 | 
						|
 | 
						|
// tdestroy is a GNU extension
 | 
						|
// UNSUPPORTED: netbsd, freebsd
 | 
						|
 | 
						|
#include <assert.h>
 | 
						|
#include <search.h>
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
int compare(const void *pa, const void *pb) {
 | 
						|
  int a = *(const int *)pa;
 | 
						|
  int b = *(const int *)pb;
 | 
						|
  if (a < b)
 | 
						|
    return -1;
 | 
						|
  else if (a > b)
 | 
						|
    return 1;
 | 
						|
  else
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
void myfreenode(void *p) {
 | 
						|
  delete (int *)p;
 | 
						|
}
 | 
						|
 | 
						|
int main(void) {
 | 
						|
  void *root = NULL;
 | 
						|
  for (int i = 0; i < 5; ++i) {
 | 
						|
    int *p = new int(i);
 | 
						|
    void *q = tsearch(p, &root, compare);
 | 
						|
    if (q == NULL)
 | 
						|
      exit(1);
 | 
						|
    if (*(int **)q != p)
 | 
						|
      delete p;
 | 
						|
  }
 | 
						|
 | 
						|
  tdestroy(root, myfreenode);
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 |