// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp // RUN: grep -Ev "// *[A-Z-]+:" %s > %t_risky.cpp // RUN: clang-modernize -loop-convert -use-nullptr %t.cpp -- -std=c++11 // RUN: FileCheck -input-file=%t.cpp %s // RUN: clang-modernize -loop-convert -use-nullptr -risk=risky %t_risky.cpp -- -std=c++11 // RUN: FileCheck -check-prefix=RISKY -input-file=%t_risky.cpp %s #define NULL 0 struct T { struct iterator { int *& operator*(); const int *& operator*() const; iterator & operator++(); bool operator!=(const iterator &other); void insert(int *); int *x; }; iterator begin(); iterator end(); }; void test_loopconvert_and_nullptr_iterator() { T t; for (T::iterator it = t.begin(); it != t.end(); ++it) { *it = NULL; } // CHECK: for (auto & elem : t) // CHECK-NEXT: elem = nullptr; } void test_loopconvert_and_nullptr_risky() { const int N = 10; int *(*pArr)[N]; for (int i = 0; i < N; ++i) { (*pArr)[i] = NULL; } // RISKY: for (auto & elem : *pArr) // RISKY-NEXT: elem = nullptr; }