Before checking bitfield initialization, make sure that neither the

bit-field width nor the initializer value are type- or
value-dependent. Fixes PR8712.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124866 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2011-02-04 13:09:01 +00:00
parent fdc13a00a0
commit 46ff3034d1
2 changed files with 19 additions and 0 deletions

View File

@ -2643,6 +2643,13 @@ bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init,
if (Bitfield->getType()->isBooleanType())
return false;
// Ignore value- or type-dependent expressions.
if (Bitfield->getBitWidth()->isValueDependent() ||
Bitfield->getBitWidth()->isTypeDependent() ||
Init->isValueDependent() ||
Init->isTypeDependent())
return false;
Expr *OriginalInit = Init->IgnoreParenImpCasts();
llvm::APSInt Width(32);

View File

@ -90,3 +90,15 @@ namespace PR7355 {
A<int> ai; // expected-note{{in instantiation of}}
}
namespace PR8712 {
template <int dim>
class B {
public:
B(const unsigned char i);
unsigned char value : (dim > 0 ? dim : 1);
};
template <int dim>
inline B<dim>::B(const unsigned char i) : value(i) {}
}