54 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -std=c++11 -fexceptions -fcxx-exceptions -verify %s2// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -std=c++11 -verify %s3 4void clang_analyzer_eval(bool);5 6typedef __typeof__(sizeof(int)) size_t;7extern "C" void *malloc(size_t);8 9// This is the standard placement new.10inline void* operator new(size_t, void* __p) throw()11{12 return __p;13}14 15struct NoThrow {16 void *operator new(size_t) throw();17};18 19struct NoExcept {20 void *operator new(size_t) noexcept;21};22 23struct DefaultThrow {24 void *operator new(size_t);25};26 27struct ExplicitThrow {28 void *operator new(size_t) throw(int);29};30 31void testNew() {32 clang_analyzer_eval(new NoThrow); // expected-warning{{UNKNOWN}}33 clang_analyzer_eval(new NoExcept); // expected-warning{{UNKNOWN}}34 35 clang_analyzer_eval(new DefaultThrow); // expected-warning{{TRUE}}36 clang_analyzer_eval(new ExplicitThrow); // expected-warning{{TRUE}}37}38 39void testNewArray() {40 clang_analyzer_eval(new NoThrow[2]); // expected-warning{{TRUE}}41 clang_analyzer_eval(new NoExcept[2]); // expected-warning{{TRUE}}42 clang_analyzer_eval(new DefaultThrow[2]); // expected-warning{{TRUE}}43 clang_analyzer_eval(new ExplicitThrow[2]); // expected-warning{{TRUE}}44}45 46extern void *operator new[](size_t, int) noexcept;47 48void testNewArrayNoThrow() {49 clang_analyzer_eval(new (1) NoThrow[2]); // expected-warning{{UNKNOWN}}50 clang_analyzer_eval(new (1) NoExcept[2]); // expected-warning{{UNKNOWN}}51 clang_analyzer_eval(new (1) DefaultThrow[2]); // expected-warning{{UNKNOWN}}52 clang_analyzer_eval(new (1) ExplicitThrow[2]); // expected-warning{{UNKNOWN}}53}54