| // RUN: %clang_cc1 -std=c++1z -verify -emit-llvm-only %s | 
 | // expected-no-diagnostics | 
 |  | 
 | // rdar://problem/33888545 | 
 | template <unsigned int BUFFER_SIZE> class Buffer {}; | 
 |  | 
 | class A { | 
 | public: | 
 |   int status; | 
 | }; | 
 |  | 
 | template <unsigned int N> A parse(Buffer<N> buffer); | 
 |  | 
 | template<unsigned int N> | 
 | void init_in_if(Buffer<N> buffer) { | 
 |   if (A a = parse(buffer); a.status > 0) { | 
 |   } | 
 | } | 
 |  | 
 | template<unsigned int N> | 
 | void init_in_switch(Buffer<N> buffer) { | 
 |   switch (A a = parse(buffer); a.status) { | 
 |     default: | 
 |       break; | 
 |   } | 
 | } | 
 |  | 
 | void test() { | 
 |   Buffer<10> buffer; | 
 |   init_in_if(buffer); | 
 |   init_in_switch(buffer); | 
 | } |