blob: db56cda6cdd1601a3b4ee15f89365870d494d363 [file] [log] [blame]
Nuno Lopesfc284482009-12-16 16:59:22 +00001// RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-llvm -o %t-1.ll %s
2// RUN: FileCheck -check-prefix SANE --input-file=%t-1.ll %s
3// RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-llvm -fno-assume-sane-operator-new -o %t-2.ll %s
4// RUN: FileCheck -check-prefix SANENOT --input-file=%t-2.ll %s
5
6
7class teste {
8 int A;
John McCall7002f4c2010-04-09 19:03:51 +00009public:
Nuno Lopesfc284482009-12-16 16:59:22 +000010 teste() : A(2) {}
Nuno Lopesfc284482009-12-16 16:59:22 +000011};
12
13void f1() {
Chris Lattner6c552c12010-07-20 20:19:24 +000014 // SANE: declare noalias i8* @_Znwj(
15 // SANENOT: declare i8* @_Znwj(
Nuno Lopesfc284482009-12-16 16:59:22 +000016 new teste();
17}
Chris Lattner6c552c12010-07-20 20:19:24 +000018
19
20// rdar://5739832 - operator new should check for overflow in multiply.
21void *f2(long N) {
22 return new int[N];
23
John McCall1e7fe752010-09-02 09:58:18 +000024// SANE: [[UWO:%.*]] = call {{.*}} @llvm.umul.with.overflow
25// SANE-NEXT: [[OVER:%.*]] = extractvalue {{.*}} [[UWO]], 1
26// SANE-NEXT: [[SUM:%.*]] = extractvalue {{.*}} [[UWO]], 0
27// SANE-NEXT: [[RESULT:%.*]] = select i1 [[OVER]], i32 -1, i32 [[SUM]]
28// SANE-NEXT: call noalias i8* @_Znaj(i32 [[RESULT]])
Chris Lattner6c552c12010-07-20 20:19:24 +000029}