1*67e74705SXin Li // RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-llvm -o %t-1.ll %s 2*67e74705SXin Li // RUN: FileCheck -check-prefix SANE --input-file=%t-1.ll %s 3*67e74705SXin Li // RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-llvm -fno-assume-sane-operator-new -o %t-2.ll %s 4*67e74705SXin Li // RUN: FileCheck -check-prefix SANENOT --input-file=%t-2.ll %s 5*67e74705SXin Li 6*67e74705SXin Li 7*67e74705SXin Li class teste { 8*67e74705SXin Li int A; 9*67e74705SXin Li public: teste()10*67e74705SXin Li teste() : A(2) {} 11*67e74705SXin Li }; 12*67e74705SXin Li f1()13*67e74705SXin Livoid f1() { 14*67e74705SXin Li // SANE: declare noalias i8* @_Znwj( 15*67e74705SXin Li // SANENOT: declare i8* @_Znwj( 16*67e74705SXin Li new teste(); 17*67e74705SXin Li } 18*67e74705SXin Li 19*67e74705SXin Li // rdar://5739832 - operator new should check for overflow in multiply. f2(long N)20*67e74705SXin Livoid *f2(long N) { 21*67e74705SXin Li return new int[N]; 22*67e74705SXin Li 23*67e74705SXin Li // SANE: [[UWO:%.*]] = call {{.*}} @llvm.umul.with.overflow 24*67e74705SXin Li // SANE-NEXT: [[OVER:%.*]] = extractvalue {{.*}} [[UWO]], 1 25*67e74705SXin Li // SANE-NEXT: [[SUM:%.*]] = extractvalue {{.*}} [[UWO]], 0 26*67e74705SXin Li // SANE-NEXT: [[RESULT:%.*]] = select i1 [[OVER]], i32 -1, i32 [[SUM]] 27*67e74705SXin Li // SANE-NEXT: call i8* @_Znaj(i32 [[RESULT]]) 28*67e74705SXin Li } 29*67e74705SXin Li 30*67e74705SXin Li // SANE: declare noalias i8* @_Znaj( 31*67e74705SXin Li // SANENOT: declare i8* @_Znaj( 32