mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-05-19 12:26:57 +00:00

Clang currently crashes for switch statements inside a template when the condition is a non-integer field. The crash is due to incorrect type-dependency of field. Type-dependency of member expressions is currently set based on the containing class. This patch changes this for 'members of the current instantiation' to set the type dependency based on the member's type instead. A few lit tests started to fail once I applied this patch because errors are now diagnosed earlier (does not wait till instantiation). I've modified these tests in this patch as well. Patch fixes PR#40982 Differential Revision: https://reviews.llvm.org/D61027 llvm-svn: 368706
37 lines
592 B
C++
37 lines
592 B
C++
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
|
|
|
enum Enum { val = 1 };
|
|
template <Enum v> struct C {
|
|
typedef C<v> Self;
|
|
};
|
|
template struct C<val>;
|
|
|
|
template<typename T>
|
|
struct get_size {
|
|
static const unsigned value = sizeof(T);
|
|
};
|
|
|
|
template<typename T>
|
|
struct X0 {
|
|
enum {
|
|
Val1 = get_size<T>::value,
|
|
Val2,
|
|
SumOfValues = Val1 + Val2
|
|
};
|
|
};
|
|
|
|
X0<int> x0i;
|
|
|
|
namespace rdar8020920 {
|
|
template<typename T>
|
|
struct X {
|
|
enum { e0 = 32 };
|
|
|
|
unsigned long long bitfield : e0;
|
|
|
|
void f(int j) {
|
|
bitfield + j; // expected-warning {{expression result unused}}
|
|
}
|
|
};
|
|
}
|