casts.c revision 59c03ff2a686baa88a2e69c7f6fdf1a36b716190
1// RUN: clang-cc -analyze -checker-cfref -analyzer-store=region --verify %s 2 3// Test if the 'storage' region gets properly initialized after it is cast to 4// 'struct sockaddr *'. 5 6#include <sys/socket.h> 7void f(int sock) { 8 struct sockaddr_storage storage; 9 struct sockaddr* sockaddr = (struct sockaddr*)&storage; 10 socklen_t addrlen = sizeof(storage); 11 getsockname(sock, sockaddr, &addrlen); 12 switch (sockaddr->sa_family) { // no-warning 13 default: 14 ; 15 } 16} 17 18struct s { 19 struct s *value; 20}; 21 22int f1(struct s **pval) { 23 int *tbool = ((void*)0); 24 struct s *t = *pval; 25 pval = &(t->value); 26 tbool = (int *)pval; // Should record the cast-to type here. 27 char c = (unsigned char) *tbool; // Should use cast-to type to create symbol. 28} 29 30