aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/analyzer/symbolic-7.c
blob: c1464555e8ac4a52b6b1d49745e370a24d1afd2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "analyzer-decls.h"

extern void maybe_write (int *);

void test_1 (int i)
{
  /* An array with purely concrete bindings.  */
  int arr[2];
  arr[0] = 1066;
  arr[1] = 1776;

  /* Concrete reads.  */
  __analyzer_eval (arr[0] == 1066); /* { dg-warning "TRUE" } */
  __analyzer_eval (arr[1] == 1776); /* { dg-warning "TRUE" } */

  /* Symbolic read.  */
  __analyzer_describe (0, arr[i]); /* { dg-warning "svalue: 'UNKNOWN\\(int\\)'" } */
  __analyzer_eval (arr[i] == 1776); /* { dg-warning "UNKNOWN" } */
}

void test_2 (int i)
{
  /* An array that could have been touched.  */
  int arr[2];
  maybe_write (arr);
  
  /* Concrete reads.  */
  __analyzer_eval (arr[0] == 42); /* { dg-warning "UNKNOWN" } */

  /* Symbolic read.  */
  __analyzer_eval (arr[i] == 42); /* { dg-warning "UNKNOWN" } */
}

void test_3_concrete_read (int i)
{
  /* An array that can't have been touched.  */
  int arr[2];
  
  /* Concrete reads.  */
  __analyzer_eval (arr[0] == 42); /* { dg-warning "use of uninitialized value 'arr\\\[0\\\]'" } */
}

void test_3_symbolic_read (int i)
{
  /* An array that can't have been touched.  */
  int arr[2];
  
  /* Symbolic read.  */
  __analyzer_eval (arr[i] == 42); /* { dg-warning "use of uninitialized value 'arr\\\[i\\\]'" } */
}