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