|  | // RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits -std=c++11 %s 2>&1 | FileCheck %s | 
|  |  | 
|  | template<typename T, typename U> | 
|  | struct pair {}; | 
|  |  | 
|  | template<typename T, typename U> | 
|  | struct map { | 
|  | typedef pair<T,U> *iterator; | 
|  | iterator begin(); | 
|  | iterator end(); | 
|  | }; | 
|  |  | 
|  | template<typename T, typename U> | 
|  | pair<T,U> &tie(T &, U &); | 
|  |  | 
|  | int foo(map<char*,int> &m) { | 
|  | char *p; | 
|  | int n; | 
|  |  | 
|  | for (pair<char*,int> x : m) { | 
|  | (void)x; | 
|  | } | 
|  |  | 
|  | for (tie(p, n) : m) { // expected-error {{for range declaration must declare a variable}} | 
|  | (void)p; | 
|  | (void)n; | 
|  | } | 
|  |  | 
|  | return n; | 
|  | } | 
|  |  | 
|  | namespace PR19176 { | 
|  | struct Vector { | 
|  | struct iterator { | 
|  | int &operator*(); | 
|  | iterator &operator++(); | 
|  | iterator &operator++(int); | 
|  | bool operator==(const iterator &) const; | 
|  | }; | 
|  | iterator begin(); | 
|  | iterator end(); | 
|  | }; | 
|  |  | 
|  | void f() { | 
|  | Vector v; | 
|  | int a[] = {1, 2, 3, 4}; | 
|  | for (auto foo   =     a) // expected-error {{range-based 'for' statement uses ':', not '='}} | 
|  | // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:19-[[@LINE-1]]:20}:":" | 
|  | (void)foo; | 
|  | for (auto i | 
|  | = | 
|  | v) // expected-error@-1 {{range-based 'for' statement uses ':', not '='}} | 
|  | // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:8}:":" | 
|  | (void)i; | 
|  | #define FORRANGE(v, a) for (DECLVARWITHINIT(v) a)  // expected-note {{expanded from macro}} | 
|  | #define DECLAUTOVAR(v) auto v | 
|  | #define DECLVARWITHINIT(v) DECLAUTOVAR(v) =  // expected-note {{expanded from macro}} | 
|  | FORRANGE(i, a) {  // expected-error {{range-based 'for' statement uses ':', not '='}} | 
|  |  | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | namespace GH63010 { | 
|  | void foo(int n) { | 
|  | int a[] = {1, 2, 3, 4, 5}; | 
|  | { | 
|  | for (auto x = n ? 1 : 2 : a); // expected-error {{expected ';' in 'for' statement specifier}} \ | 
|  | // expected-error {{expected expression}} | 
|  | for (int i = 1; auto x = n ? 1 : 2 : a); // expected-error {{expected ';' in 'for' statement specifier}} | 
|  | } | 
|  | { | 
|  | for (auto x = n ? 1 : 2 : a)  // expected-error {{expected ';' in 'for' statement specifier}} \ | 
|  | // expected-error {{expected expression}} | 
|  |  | 
|  | }  // expected-error {{expected statement}} | 
|  | { | 
|  | for (int i = 1; auto x = n ? 1 : 2 : a) // expected-error {{expected ';' in 'for' statement specifier}} | 
|  | } // expected-error {{expected statement}} | 
|  | } | 
|  | } |