llvm-project/clang-tools-extra/test/clang-modernize/ReplaceAutoPtr/move.cpp

64 lines
2.0 KiB
C++

// Without inline namespace:
//
// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
// RUN: clang-modernize -replace-auto_ptr %t.cpp -- -I %S/Inputs std=c++11
// RUN: FileCheck -input-file=%t.cpp %s
//
// With inline namespace:
//
// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
// RUN: clang-modernize -replace-auto_ptr %t.cpp -- -I %S/Inputs std=c++11 \
// RUN: -DUSE_INLINE_NAMESPACE=1
// RUN: FileCheck -input-file=%t.cpp %s
#include "memory_stub.h"
void takes_ownership_fn(std::auto_ptr<int> x);
// CHECK: void takes_ownership_fn(std::unique_ptr<int> x);
std::auto_ptr<int> get_by_value();
// CHECK: std::unique_ptr<int> get_by_value();
class Wrapper {
public:
std::auto_ptr<int> &get_wrapped();
private:
std::auto_ptr<int> wrapped;
};
void f() {
std::auto_ptr<int> a, b, c;
// CHECK: std::unique_ptr<int> a, b, c;
Wrapper wrapper_a, wrapper_b;
a = b;
// CHECK: a = std::move(b);
wrapper_a.get_wrapped() = wrapper_b.get_wrapped();
// CHECK: wrapper_a.get_wrapped() = std::move(wrapper_b.get_wrapped());
// Test that 'std::move()' is inserted when call to the
// copy-constructor are made.
takes_ownership_fn(c);
// CHECK: takes_ownership_fn(std::move(c));
takes_ownership_fn(wrapper_a.get_wrapped());
// CHECK: takes_ownership_fn(std::move(wrapper_a.get_wrapped()));
std::auto_ptr<int> d[] = { std::auto_ptr<int>(new int(1)),
std::auto_ptr<int>(new int(2)) };
std::auto_ptr<int> e = d[0];
// CHECK: std::unique_ptr<int> d[] = { std::unique_ptr<int>(new int(1)),
// CHECK-NEXT: std::unique_ptr<int>(new int(2)) };
// CHECK-NEXT: std::unique_ptr<int> e = std::move(d[0]);
// Test that std::move() is not used when assigning an rvalue
std::auto_ptr<int> f;
f = std::auto_ptr<int>(new int(0));
// CHECK: std::unique_ptr<int> f;
// CHECK-NEXT: f = std::unique_ptr<int>(new int(0));
std::auto_ptr<int> g = get_by_value();
// CHECK: std::unique_ptr<int> g = get_by_value();
}