mirror of https://github.com/microsoft/clang.git
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:
parent
fdc13a00a0
commit
46ff3034d1
|
@ -2643,6 +2643,13 @@ bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init,
|
||||||
if (Bitfield->getType()->isBooleanType())
|
if (Bitfield->getType()->isBooleanType())
|
||||||
return false;
|
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();
|
Expr *OriginalInit = Init->IgnoreParenImpCasts();
|
||||||
|
|
||||||
llvm::APSInt Width(32);
|
llvm::APSInt Width(32);
|
||||||
|
|
|
@ -90,3 +90,15 @@ namespace PR7355 {
|
||||||
|
|
||||||
A<int> ai; // expected-note{{in instantiation of}}
|
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) {}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue