1e449edc5bdace60f9d754c32abc5459bc7d94a14Jordan Rose// RUN: %clang_cc1 -analyze -analyzer-checker=core,cplusplus.NewDelete,alpha.cplusplus.NewDeleteLeaks,unix.Malloc -std=c++11 -fblocks -verify %s
2697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev// expected-no-diagnostics
3697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev
4697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsevnamespace std {
5697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev  typedef __typeof__(sizeof(int)) size_t;
6697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev}
7697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct X {};
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid *operator new(std::size_t, X, ...);
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid *operator new[](std::size_t, X, ...);
12697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev
13697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsevvoid testGlobalCustomVariadicNew() {
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  X x;
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  void *p1 = operator new(0, x); // no warn
17697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  void *p2 = operator new[](0, x); // no warn
19697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  int *p3 = new (x) int; // no warn
21697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  int *p4 = new (x) int[0]; // no warn
23697462881c4b9b704c7859f4bab0a6116c684bb1Anton Yartsev}
24