| // 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; |
| } |