(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
torture/
ubsan-1.c
       1  /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
       2  /* { dg-additional-options "-fsanitize=bounds" } */
       3  /* { dg-require-effective-target alloca } */
       4  
       5  #include <stdlib.h>
       6  #include "../analyzer-decls.h"
       7  
       8  int test_1 (int *arr, int i, int n)
       9  {
      10    if (i >= n)
      11      return 0;
      12    return arr[i];
      13  }
      14  
      15  int test_2 (int *arr, int i, int n)
      16  {
      17    if (i >= n)
      18      return 0;
      19    if (arr[i])
      20      __analyzer_eval (arr[i]); /* { dg-warning "TRUE" } */
      21    else
      22      __analyzer_eval (arr[i]); /* { dg-warning "FALSE" } */
      23    return 1;
      24  }
      25  
      26  int test_3 (int arr[], int i, int n)
      27  {
      28    if (i >= n)
      29      return 0;
      30    if (arr[i])
      31      __analyzer_eval (arr[i]); /* { dg-warning "TRUE" } */
      32    else
      33      __analyzer_eval (arr[i]); /* { dg-warning "FALSE" } */
      34    return 1;
      35  }
      36  
      37  void test_4 (int i, int n)
      38  {
      39    int arr[n];
      40    arr[i] = 42;
      41    __analyzer_eval (arr[i] == 42); /* { dg-warning "TRUE" } */
      42  }
      43  
      44  void test_5 (int i, int n)
      45  {
      46    int *arr = malloc (sizeof(int) * n);
      47    if (arr)
      48      {
      49        arr[i] = 42;
      50        __analyzer_eval (arr[i] == 42); /* { dg-warning "TRUE" } */
      51      }
      52    free (arr);
      53  }
      54  
      55  int global;
      56  
      57  void test_6 (int i, int n)
      58  {
      59    int arr[n];
      60    int saved = global;
      61    arr[i] = 42;
      62    __analyzer_eval (saved == global); /* { dg-warning "TRUE" } */
      63  }