70 lines · cpp
1// RUN: %clang_analyze_cc1 %s -analyzer-checker=core.uninitialized.NewArraySize -analyzer-output=text -verify2 3#include "Inputs/system-header-simulator-cxx.h"4 5void checkUndefinedElmenetCountValue() {6 int n;7 // expected-note@-1{{'n' declared without an initial value}}8 9 int *arr = new int[n]; // expected-warning{{Element count in new[] is a garbage value}}10 // expected-note@-1{{Element count in new[] is a garbage value}}11}12 13void checkUndefinedElmenetCountMultiDimensionalValue() {14 int n;15 // expected-note@-1{{'n' declared without an initial value}}16 17 auto *arr = new int[n][5]; // expected-warning{{Element count in new[] is a garbage value}}18 // expected-note@-1{{Element count in new[] is a garbage value}}19}20 21void checkUndefinedElmenetCountReference() {22 int n;23 // expected-note@-1{{'n' declared without an initial value}}24 25 int &ref = n;26 // expected-note@-1{{'ref' initialized here}}27 28 int *arr = new int[ref]; // expected-warning{{Element count in new[] is a garbage value}}29 // expected-note@-1{{Element count in new[] is a garbage value}}30}31 32void checkUndefinedElmenetCountMultiDimensionalReference() {33 int n;34 // expected-note@-1{{'n' declared without an initial value}}35 36 int &ref = n;37 // expected-note@-1{{'ref' initialized here}}38 39 auto *arr = new int[ref][5]; // expected-warning{{Element count in new[] is a garbage value}}40 // expected-note@-1{{Element count in new[] is a garbage value}}41}42 43int foo() {44 int n;45 46 return n;47}48 49void checkUndefinedElmenetCountFunction() {50 int *arr = new int[foo()]; // expected-warning{{Element count in new[] is a garbage value}}51 // expected-note@-1{{Element count in new[] is a garbage value}}52}53 54void checkUndefinedElmenetCountMultiDimensionalFunction() {55 auto *arr = new int[foo()][5]; // expected-warning{{Element count in new[] is a garbage value}}56 // expected-note@-1{{Element count in new[] is a garbage value}}57}58 59void *malloc(size_t);60 61void checkUndefinedPlacementElementCount() {62 int n;63 // expected-note@-1{{'n' declared without an initial value}}64 65 void *buffer = malloc(sizeof(std::string) * 10);66 std::string *p =67 ::new (buffer) std::string[n]; // expected-warning{{Element count in new[] is a garbage value}}68 // expected-note@-1{{Element count in new[] is a garbage value}}69}70