mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-24 22:08:57 -04:00

It fixes a crash in CodeGen when we are trying to generate code for initializer expression created before template instantiation, like CallExpr '<dependent type>' |-UnresolvedLookupExpr '<overloaded function type>' lvalue (ADL) = 'parse' `-DeclRefExpr 'Buffer<N>' lvalue ParmVar 'buffer' 'Buffer<N>' rdar://problem/33888545 Reviewers: rsmith, ahatanak Reviewed By: ahatanak Subscribers: aemerson, kristof.beyls, cfe-commits Differential Revision: https://reviews.llvm.org/D38009 llvm-svn: 313896
33 lines
593 B
C++
33 lines
593 B
C++
// 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);
|
|
}
|