Spurious puzzling warning with --analyze

$ cat test.c

void bar( int x ) { }

void foo( int n )
{
  int x[4096], i;
  
  for ( i = 0; i < (1 << n); i++ )
  {
    x[i] = i;
  }
  
  for ( i = 0; i < (1 << n); i++ )
  {
    bar( x[i] );
  }
}

$ clang test.c --analyze
test.c:15:3: warning: Pass-by-value argument in function call is undefined
                bar( x[i] );
                ^ ~~~~
$ clang --version
clang version 2.8 (trunk 111903)

Robert P.

Hi Robert,

Please file a bugzilla report. The problem is that '1 << n' is not getting accurately modeled, resulting in a false path that triggers the warning.