[clang] Fix the incorrect dependence bits for DependentExtIntType.

The error-bit was missing, and the unexpandedpack bit seemed to be
set incorrectly.

Reviewed By: sammccall, erichkeane

Differential Revision: https://reviews.llvm.org/D83114
This commit is contained in:
Haojian Wu 2020-07-06 16:29:16 +02:00
parent d3e3f36ff1
commit cd9a241f16
2 changed files with 6 additions and 9 deletions

View File

@ -347,15 +347,7 @@ ExtIntType::ExtIntType(bool IsUnsigned, unsigned NumBits)
DependentExtIntType::DependentExtIntType(const ASTContext &Context,
bool IsUnsigned, Expr *NumBitsExpr)
: Type(DependentExtInt, QualType{},
((NumBitsExpr->isValueDependent() || NumBitsExpr->isTypeDependent())
? TypeDependence::Dependent
: TypeDependence::None) |
(NumBitsExpr->isInstantiationDependent()
? TypeDependence::Instantiation
: TypeDependence::None) |
(NumBitsExpr->containsUnexpandedParameterPack()
? TypeDependence::VariablyModified
: TypeDependence::None)),
toTypeDependence(NumBitsExpr->getDependence())),
Context(Context), ExprAndUnsigned(NumBitsExpr, IsUnsigned) {}
bool DependentExtIntType::isUnsigned() const {

View File

@ -32,3 +32,8 @@ struct Z {
int X : func<int>(); // expected-note {{in instantiation of function template}}
};
constexpr int ssss = sizeof(Z);
struct Z2 {
int X : sizeof(_ExtInt(invalid())); // expected-error {{use of undeclared identifier}}
};
constexpr int sssss = sizeof(Z2);