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);
|
|
}
|