diff options
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 22 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaExceptionSpec.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaLookup.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 5 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaType.cpp | 9 | 
6 files changed, 26 insertions, 23 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 623e72f2998..ba929587aea 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -4712,11 +4712,12 @@ CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(    }    FunctionProtoType::ExtProtoInfo EPI; -  EPI.HasExceptionSpec = ExceptSpec.hasExceptionSpecification(); -  EPI.HasAnyExceptionSpec = ExceptSpec.hasAnyExceptionSpecification(); +  EPI.ExceptionSpecType = ExceptSpec.hasExceptionSpecification() ? +    (ExceptSpec.hasAnyExceptionSpecification() ? EST_DynamicAny : EST_Dynamic) : +    EST_None;    EPI.NumExceptions = ExceptSpec.size();    EPI.Exceptions = ExceptSpec.data(); -   +    // Create the actual constructor declaration.    CanQualType ClassType      = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl)); @@ -4989,8 +4990,9 @@ CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {    // Create the actual destructor declaration.    FunctionProtoType::ExtProtoInfo EPI; -  EPI.HasExceptionSpec = ExceptSpec.hasExceptionSpecification(); -  EPI.HasAnyExceptionSpec = ExceptSpec.hasAnyExceptionSpecification(); +  EPI.ExceptionSpecType = ExceptSpec.hasExceptionSpecification() ? +    (ExceptSpec.hasAnyExceptionSpecification() ? EST_DynamicAny : EST_Dynamic) : +    EST_None;    EPI.NumExceptions = ExceptSpec.size();    EPI.Exceptions = ExceptSpec.data();    QualType Ty = Context.getFunctionType(Context.VoidTy, 0, 0, EPI); @@ -5387,8 +5389,9 @@ CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {    //   An implicitly-declared copy assignment operator is an inline public    //   member of its class.    FunctionProtoType::ExtProtoInfo EPI; -  EPI.HasExceptionSpec = ExceptSpec.hasExceptionSpecification(); -  EPI.HasAnyExceptionSpec = ExceptSpec.hasAnyExceptionSpecification(); +  EPI.ExceptionSpecType = ExceptSpec.hasExceptionSpecification() ? +    (ExceptSpec.hasAnyExceptionSpecification() ? EST_DynamicAny : EST_Dynamic) : +    EST_None;    EPI.NumExceptions = ExceptSpec.size();    EPI.Exceptions = ExceptSpec.data();    DeclarationName Name = Context.DeclarationNames.getCXXOperatorName(OO_Equal); @@ -5849,8 +5852,9 @@ CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(    //   An implicitly-declared copy constructor is an inline public    //   member of its class.    FunctionProtoType::ExtProtoInfo EPI; -  EPI.HasExceptionSpec = ExceptSpec.hasExceptionSpecification(); -  EPI.HasAnyExceptionSpec = ExceptSpec.hasAnyExceptionSpecification(); +  EPI.ExceptionSpecType = ExceptSpec.hasExceptionSpecification() ? +    (ExceptSpec.hasAnyExceptionSpecification() ? EST_DynamicAny : EST_Dynamic) : +    EST_None;    EPI.NumExceptions = ExceptSpec.size();    EPI.Exceptions = ExceptSpec.data();    DeclarationName Name diff --git a/clang/lib/Sema/SemaExceptionSpec.cpp b/clang/lib/Sema/SemaExceptionSpec.cpp index 123e185cab3..75ae8c215ab 100644 --- a/clang/lib/Sema/SemaExceptionSpec.cpp +++ b/clang/lib/Sema/SemaExceptionSpec.cpp @@ -129,8 +129,7 @@ bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {         Context.getSourceManager().isInSystemHeader(Old->getLocation())) &&        Old->isExternC()) {      FunctionProtoType::ExtProtoInfo EPI = NewProto->getExtProtoInfo(); -    EPI.HasExceptionSpec = true; -    EPI.HasAnyExceptionSpec = false; +    EPI.ExceptionSpecType = EST_Dynamic;      EPI.NumExceptions = 0;      QualType NewType = Context.getFunctionType(NewProto->getResultType(),                                                 NewProto->arg_type_begin(), @@ -145,8 +144,9 @@ bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {        = Old->getType()->getAs<FunctionProtoType>();      FunctionProtoType::ExtProtoInfo EPI = NewProto->getExtProtoInfo(); -    EPI.HasExceptionSpec = OldProto->hasExceptionSpec(); -    EPI.HasAnyExceptionSpec = OldProto->hasAnyExceptionSpec(); +    EPI.ExceptionSpecType = OldProto->hasExceptionSpec() ? +      (OldProto->hasAnyExceptionSpec() ? EST_DynamicAny : EST_Dynamic) : +      EST_None;      EPI.NumExceptions = OldProto->getNumExceptions();      EPI.Exceptions = OldProto->exception_begin(); diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index eee02096ac7..e4ac3ed6bbb 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -1501,7 +1501,7 @@ void Sema::DeclareGlobalAllocationFunction(DeclarationName Name,    }    FunctionProtoType::ExtProtoInfo EPI; -  EPI.HasExceptionSpec = true; +  EPI.ExceptionSpecType = EST_Dynamic;    if (HasBadAllocExceptionSpec) {      EPI.NumExceptions = 1;      EPI.Exceptions = &BadAllocType; diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index d1b6ef104d3..3315ab6e53a 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -686,8 +686,7 @@ static bool LookupDirect(Sema &S, LookupResult &R, const DeclContext *DC) {      // FIXME: Calling convention!      FunctionProtoType::ExtProtoInfo EPI = ConvProto->getExtProtoInfo();      EPI.ExtInfo = EPI.ExtInfo.withCallingConv(CC_Default); -    EPI.HasExceptionSpec = false; -    EPI.HasAnyExceptionSpec = false; +    EPI.ExceptionSpecType = EST_None;      EPI.NumExceptions = 0;      QualType ExpectedType        = R.getSema().Context.getFunctionType(R.getLookupName().getCXXNameType(), diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 3473c877093..b668e173867 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -2158,8 +2158,9 @@ TemplateDeclInstantiator::InitFunctionInstantiation(FunctionDecl *New,      // Rebuild the function type       FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo(); -    EPI.HasExceptionSpec = Proto->hasExceptionSpec(); -    EPI.HasAnyExceptionSpec = Proto->hasAnyExceptionSpec(); +    EPI.ExceptionSpecType = Proto->hasExceptionSpec() ? +      (Proto->hasAnyExceptionSpec() ? EST_DynamicAny : EST_Dynamic) : +      EST_None;      EPI.NumExceptions = Exceptions.size();      EPI.Exceptions = Exceptions.data();      EPI.ExtInfo = Proto->getExtInfo(); diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 33df7a0529f..efb44df4746 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -1855,11 +1855,8 @@ TypeSourceInfo *Sema::GetTypeForDeclarator(Declarator &D, Scope *S,          }          llvm::SmallVector<QualType, 4> Exceptions; -        if (FTI.getExceptionSpecType() == EST_Dynamic || -            FTI.getExceptionSpecType() == EST_DynamicAny) { -          EPI.HasExceptionSpec = true; -          EPI.HasAnyExceptionSpec = -              FTI.getExceptionSpecType() == EST_DynamicAny; +        EPI.ExceptionSpecType = FTI.getExceptionSpecType(); +        if (FTI.getExceptionSpecType() == EST_Dynamic) {            Exceptions.reserve(FTI.NumExceptions);            for (unsigned ei = 0, ee = FTI.NumExceptions; ei != ee; ++ei) {              // FIXME: Preserve type source info. @@ -1871,6 +1868,8 @@ TypeSourceInfo *Sema::GetTypeForDeclarator(Declarator &D, Scope *S,            }            EPI.NumExceptions = Exceptions.size();            EPI.Exceptions = Exceptions.data(); +        } else if (FTI.getExceptionSpecType() == EST_ComputedNoexcept) { +          EPI.NoexceptExpr = FTI.NoexceptExpr;          }          T = Context.getFunctionType(T, ArgTys.data(), ArgTys.size(), EPI);  | 

