brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 150e3ac Raw
124 lines · cpp
1// RUN: %check_clang_tidy %s modernize-use-emplace %t -- \2// RUN:   -config="{CheckOptions: \3// RUN:             {modernize-use-emplace.IgnoreImplicitConstructors: \4// RUN:                true}}"5 6namespace std {7template <typename E>8class initializer_list9{10public:11  const E *a, *b;12  initializer_list() noexcept {}13};14 15template <typename T>16class vector {17public:18  vector() = default;19  vector(initializer_list<T>) {}20 21  void push_back(const T &) {}22  void push_back(T &&) {}23 24  template <typename... Args>25  void emplace_back(Args &&... args){};26  ~vector();27};28 29} // namespace std30 31void testInts() {32  std::vector<int> v;33  v.push_back(42);34  v.push_back(int(42));35  v.push_back(int{42});36  v.push_back(42.0);37  int z;38  v.push_back(z);39}40 41struct Something {42  Something(int a, int b = 41) {}43  Something() {}44  void push_back(Something);45  int getInt() { return 42; }46};47 48struct Convertable {49  operator Something() { return Something{}; }50};51 52struct Zoz {53  Zoz(Something, int = 42) {}54};55 56Zoz getZoz(Something s) { return Zoz(s); }57 58void test_Something() {59  std::vector<Something> v;60 61  v.push_back(Something(1, 2));62  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back instead of push_back [modernize-use-emplace]63  // CHECK-FIXES: v.emplace_back(1, 2);64 65  v.push_back(Something{1, 2});66  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back67  // CHECK-FIXES: v.emplace_back(1, 2);68 69  v.push_back(Something());70  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back71  // CHECK-FIXES: v.emplace_back();72 73  v.push_back(Something{});74  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back75  // CHECK-FIXES: v.emplace_back();76 77  Something Different;78  v.push_back(Something(Different.getInt(), 42));79  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back80  // CHECK-FIXES: v.emplace_back(Different.getInt(), 42);81 82  v.push_back(Different.getInt());83  v.push_back(42);84 85  Something temporary(42, 42);86  temporary.push_back(temporary);87  v.push_back(temporary);88 89  v.push_back(Convertable());90  v.push_back(Convertable{});91  Convertable s;92  v.push_back(s);93}94 95template <typename ElemType>96void dependOnElem() {97  std::vector<ElemType> v;98  v.push_back(ElemType(42));99}100 101template <typename ContainerType>102void dependOnContainer() {103  ContainerType v;104  v.push_back(Something(42));105}106 107void callDependent() {108  dependOnElem<Something>();109  dependOnContainer<std::vector<Something>>();110}111 112void test2() {113  std::vector<Zoz> v;114  v.push_back(Zoz(Something(21, 37)));115  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back116  // CHECK-FIXES: v.emplace_back(Something(21, 37));117 118  v.push_back(Zoz(Something(21, 37), 42));119  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back120  // CHECK-FIXES: v.emplace_back(Something(21, 37), 42);121 122  v.push_back(getZoz(Something(1, 2)));123}124