1// RUN: %clangxx_asan -O0 -mllvm -asan-instrument-dynamic-allocas %s -o %t
2// RUN: not %run %t 2>&1 | FileCheck %s
3//
4
5// This is reduced testcase based on Chromium code.
6// See http://reviews.llvm.org/D6055?vs=on&id=15616&whitespace=ignore-all#toc.
7
8#include <stdint.h>
9#include <assert.h>
10
11int a = 7;
12int b;
13int c;
14int *p;
15
16__attribute__((noinline)) void fn3(int *first, int second) {
17}
18
19int main() {
20 int d = b && c;
21 int e[a];
22 assert(!(reinterpret_cast<uintptr_t>(e) & 31L));
23 int f;
24 if (d)
25 fn3(first: &f, second: sizeof 0 * (&c - e));
26 e[a] = 0;
27// CHECK: ERROR: AddressSanitizer: dynamic-stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]]
28// CHECK: WRITE of size 4 at [[ADDR]] thread T0
29 return 0;
30}
31

source code of compiler-rt/test/asan/TestCases/vla_chrome_testcase.cpp