55 lines
1.0 KiB
C++
55 lines
1.0 KiB
C++
// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -emit-llvm -o - -std=c++11 |FileCheck %s
|
|
|
|
class x {
|
|
public: int operator=(int);
|
|
};
|
|
void a() {
|
|
x a;
|
|
a = 1u;
|
|
}
|
|
|
|
void f(int i, int j) {
|
|
// CHECK: load i32
|
|
// CHECK: load i32
|
|
// CHECK: add nsw i32
|
|
// CHECK: store i32
|
|
// CHECK: store i32 17, i32
|
|
// CHECK: ret
|
|
(i += j) = 17;
|
|
}
|
|
|
|
// Taken from g++.old-deja/g++.jason/net.C
|
|
namespace test1 {
|
|
template <class T> void fn (T t) { }
|
|
template <class T> struct A {
|
|
void (*p)(T);
|
|
A() { p = fn; }
|
|
};
|
|
|
|
A<int> a;
|
|
}
|
|
|
|
// Ensure that we use memcpy when we would have selected a trivial assignment
|
|
// operator, even for a non-trivially-copyable type.
|
|
struct A {
|
|
A &operator=(const A&);
|
|
};
|
|
struct B {
|
|
B(const B&);
|
|
B &operator=(const B&) = default;
|
|
int n;
|
|
};
|
|
struct C {
|
|
A a;
|
|
B b[16];
|
|
};
|
|
void b(C &a, C &b) {
|
|
// CHECK: define {{.*}} @_ZN1CaSERKS_(
|
|
// CHECK: call {{.*}} @_ZN1AaSERKS_(
|
|
// CHECK-NOT: call {{.*}} @_ZN1BaSERKS_(
|
|
// CHECK: call {{.*}} @{{.*}}memcpy
|
|
// CHECK-NOT: call {{.*}} @_ZN1BaSERKS_(
|
|
// CHECK: }
|
|
a = b;
|
|
}
|