casts.c revision 88c675f001e046b7264e2a2d4174dacf3781ce5f
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 22// ElementRegion and cast-to pointee type may be of the same size: 23// 'struct s **' and 'int'. 24 25int f1(struct s **pval) { 26 int *tbool = ((void*)0); 27 struct s *t = *pval; 28 pval = &(t->value); 29 tbool = (int *)pval; 30 char c = (unsigned char) *tbool; 31} 32 33