brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · d3a79d6 Raw
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