Lines Matching refs:New
1471 const FunctionDecl *New) { in AllowOverloadingOfFunction() argument
1472 if (Context.getLangOpts().CPlusPlus || New->hasAttr<OverloadableAttr>()) in AllowOverloadingOfFunction()
1596 bool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationModuleOwnership() argument
1604 if (New->getFriendObjectKind() && in CheckRedeclarationModuleOwnership()
1605 Old->getOwningModuleForLinkage() != New->getOwningModuleForLinkage()) { in CheckRedeclarationModuleOwnership()
1606 New->setLocalOwningModule(Old->getOwningModule()); in CheckRedeclarationModuleOwnership()
1607 makeMergedDefinitionVisible(New); in CheckRedeclarationModuleOwnership()
1611 Module *NewM = New->getOwningModule(); in CheckRedeclarationModuleOwnership()
1641 Diag(New->getLocation(), diag::err_mismatched_owning_module) in CheckRedeclarationModuleOwnership()
1642 << New in CheckRedeclarationModuleOwnership()
1648 New->setInvalidDecl(); in CheckRedeclarationModuleOwnership()
1655 bool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationExported() argument
1661 if (!New->getLexicalDeclContext() in CheckRedeclarationExported()
1669 bool IsNewExported = New->isInExportDeclContext(); in CheckRedeclarationExported()
1684 if (!Old->isInNamedModule() && New->getOwningModule() && in CheckRedeclarationExported()
1685 New->getOwningModule()->isImplicitGlobalModule()) in CheckRedeclarationExported()
1696 Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S; in CheckRedeclarationExported()
1701 bool Sema::CheckRedeclarationInModule(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationInModule() argument
1702 if (CheckRedeclarationModuleOwnership(New, Old)) in CheckRedeclarationInModule()
1705 if (CheckRedeclarationExported(New, Old)) in CheckRedeclarationInModule()
1711 bool Sema::IsRedefinitionInModule(const NamedDecl *New, in IsRedefinitionInModule() argument
1713 assert(getASTContext().isSameEntity(New, Old) && in IsRedefinitionInModule()
1716 assert(const_cast<Sema *>(this)->isReachable(New) && in IsRedefinitionInModule()
1720 Module *NewM = New->getOwningModule(); in IsRedefinitionInModule()
2304 FunctionDecl *New = FunctionDecl::Create( in CreateBuiltin() local
2308 New->setImplicit(); in CreateBuiltin()
2309 New->addAttr(BuiltinAttr::CreateImplicit(Context, ID)); in CreateBuiltin()
2317 Context, New, SourceLocation(), SourceLocation(), nullptr, in CreateBuiltin()
2322 New->setParams(Params); in CreateBuiltin()
2325 AddKnownFunctionAttributes(New); in CreateBuiltin()
2326 return New; in CreateBuiltin()
2376 FunctionDecl *New = CreateBuiltin(II, R, ID, Loc); in LazilyCreateBuiltin() local
2377 RegisterLocallyScopedExternCDecl(New, S); in LazilyCreateBuiltin()
2384 CurContext = New->getDeclContext(); in LazilyCreateBuiltin()
2385 PushOnScopeChains(New, TUScope); in LazilyCreateBuiltin()
2387 return New; in LazilyCreateBuiltin()
2433 bool Sema::isIncompatibleTypedef(const TypeDecl *Old, TypedefNameDecl *New) { in isIncompatibleTypedef() argument
2439 QualType NewType = New->getUnderlyingType(); in isIncompatibleTypedef()
2444 Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) in isIncompatibleTypedef()
2447 notePreviousDefinition(Old, New->getLocation()); in isIncompatibleTypedef()
2448 New->setInvalidDecl(); in isIncompatibleTypedef()
2457 Diag(New->getLocation(), diag::err_redefinition_different_typedef) in isIncompatibleTypedef()
2460 notePreviousDefinition(Old, New->getLocation()); in isIncompatibleTypedef()
2461 New->setInvalidDecl(); in isIncompatibleTypedef()
2467 void Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, in MergeTypedefNameDecl() argument
2471 if (New->isInvalidDecl()) return; in MergeTypedefNameDecl()
2476 const IdentifierInfo *TypeID = New->getIdentifier(); in MergeTypedefNameDecl()
2483 QualType T = New->getUnderlyingType(); in MergeTypedefNameDecl()
2493 New->setTypeForDecl(Context.getObjCIdType().getTypePtr()); in MergeTypedefNameDecl()
2499 Context.setObjCClassRedefinitionType(New->getUnderlyingType()); in MergeTypedefNameDecl()
2501 New->setTypeForDecl(Context.getObjCClassType().getTypePtr()); in MergeTypedefNameDecl()
2506 Context.setObjCSelRedefinitionType(New->getUnderlyingType()); in MergeTypedefNameDecl()
2508 New->setTypeForDecl(Context.getObjCSelType().getTypePtr()); in MergeTypedefNameDecl()
2517 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeTypedefNameDecl()
2518 << New->getDeclName(); in MergeTypedefNameDecl()
2522 notePreviousDefinition(OldD, New->getLocation()); in MergeTypedefNameDecl()
2524 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2529 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2533 auto *NewTag = New->getAnonDeclWithTypedefName(); in MergeTypedefNameDecl()
2540 New->setTypeForDecl(OldTD->getTypeForDecl()); in MergeTypedefNameDecl()
2542 New->setModedTypeSourceInfo(OldTD->getTypeSourceInfo(), in MergeTypedefNameDecl()
2545 New->setTypeSourceInfo(OldTD->getTypeSourceInfo()); in MergeTypedefNameDecl()
2567 if (isIncompatibleTypedef(Old, New)) in MergeTypedefNameDecl()
2573 New->setPreviousDecl(Typedef); in MergeTypedefNameDecl()
2574 mergeDeclAttributes(New, Old); in MergeTypedefNameDecl()
2612 Diag(New->getLocation(), diag::err_redefinition) in MergeTypedefNameDecl()
2613 << New->getDeclName(); in MergeTypedefNameDecl()
2614 notePreviousDefinition(Old, New->getLocation()); in MergeTypedefNameDecl()
2615 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2630 Context.getSourceManager().isInSystemHeader(New->getLocation()))) in MergeTypedefNameDecl()
2633 Diag(New->getLocation(), diag::ext_redefinition_of_typedef) in MergeTypedefNameDecl()
2634 << New->getDeclName(); in MergeTypedefNameDecl()
2635 notePreviousDefinition(Old, New->getLocation()); in MergeTypedefNameDecl()
2671 static bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) { in mergeAlignedAttrs() argument
2700 for (auto *I : New->specific_attrs<AlignedAttr>()) { in mergeAlignedAttrs()
2722 if (ValueDecl *VD = dyn_cast<ValueDecl>(New)) in mergeAlignedAttrs()
2725 Ty = S.Context.getTagDeclType(cast<TagDecl>(New)); in mergeAlignedAttrs()
2741 if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) { in mergeAlignedAttrs()
2750 S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition) in mergeAlignedAttrs()
2762 New->addAttr(Clone); in mergeAlignedAttrs()
2771 New->addAttr(Clone); in mergeAlignedAttrs()
2910 static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) { in checkNewAttributesAfterDef() argument
2911 if (!New->hasAttrs()) in checkNewAttributesAfterDef()
2915 if (!Def || Def == New) in checkNewAttributesAfterDef()
2918 AttrVec &NewAttributes = New->getAttrs(); in checkNewAttributesAfterDef()
2923 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) { in checkNewAttributesAfterDef()
2934 VarDecl *VD = cast<VarDecl>(New); in checkNewAttributesAfterDef()
3002 cast<VarDecl>(New)->isInline() && in checkNewAttributesAfterDef()
3003 !cast<VarDecl>(New)->isInlineSpecified()) { in checkNewAttributesAfterDef()
3077 void Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, in mergeDeclAttributes() argument
3082 New->addAttr(NewAttr); in mergeDeclAttributes()
3087 New->addAttr(NewAttr); in mergeDeclAttributes()
3090 if (!Old->hasAttrs() && !New->hasAttrs()) in mergeDeclAttributes()
3097 const auto *NewConstInit = New->getAttr<ConstInitAttr>(); in mergeDeclAttributes()
3100 auto *NewVD = cast<VarDecl>(New); in mergeDeclAttributes()
3129 checkNewAttributesAfterDef(*this, New, Old); in mergeDeclAttributes()
3131 if (AsmLabelAttr *NewA = New->getAttr<AsmLabelAttr>()) { in mergeDeclAttributes()
3135 Diag(New->getLocation(), diag::err_different_asm_label); in mergeDeclAttributes()
3141 Diag(New->getLocation(), diag::err_late_asm_label_name) in mergeDeclAttributes()
3142 << isa<FunctionDecl>(Old) << New->getAttr<AsmLabelAttr>()->getRange(); in mergeDeclAttributes()
3147 if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) { in mergeDeclAttributes()
3164 if (New->hasAttr<SectionAttr>() && !Old->hasAttr<SectionAttr>()) { in mergeDeclAttributes()
3165 if (auto *VD = dyn_cast<VarDecl>(New)) { in mergeDeclAttributes()
3167 Diag(New->getLocation(), diag::warn_attribute_section_on_redeclaration); in mergeDeclAttributes()
3174 const auto *NewCSA = New->getAttr<CodeSegAttr>(); in mergeDeclAttributes()
3176 !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) { in mergeDeclAttributes()
3177 Diag(New->getLocation(), diag::warn_mismatched_section) in mergeDeclAttributes()
3185 bool foundAny = New->hasAttrs(); in mergeDeclAttributes()
3189 if (!foundAny) New->setAttrs(AttrVec()); in mergeDeclAttributes()
3214 if (mergeDeclAttribute(*this, New, I, LocalAMK)) in mergeDeclAttributes()
3218 if (mergeAlignedAttrs(*this, New, Old)) in mergeDeclAttributes()
3221 if (!foundAny) New->dropAttrs(); in mergeDeclAttributes()
3289 static bool EquivalentArrayTypes(QualType Old, QualType New, in EquivalentArrayTypes() argument
3301 if (NoSizeInfo(Old) && NoSizeInfo(New)) in EquivalentArrayTypes()
3305 if (Old->isVariableArrayType() && New->isVariableArrayType()) { in EquivalentArrayTypes()
3307 const auto *NewVAT = Ctx.getAsVariableArrayType(New); in EquivalentArrayTypes()
3315 if (Old->isConstantArrayType() && New->isConstantArrayType()) { in EquivalentArrayTypes()
3317 Ctx.getAsConstantArrayType(New)->getSize(); in EquivalentArrayTypes()
3321 if (Old->isDependentSizedArrayType() && New->isDependentSizedArrayType()) { in EquivalentArrayTypes()
3325 return Old == New; in EquivalentArrayTypes()
3384 getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) { in getNoteDiagForInvalidRedeclaration() argument
3396 OldLocation = New->getLocation(); in getNoteDiagForInvalidRedeclaration()
3421 static bool haveIncompatibleLanguageLinkages(const T *Old, const T *New) { in haveIncompatibleLanguageLinkages() argument
3427 if (OldLinkage == CXXLanguageLinkage && New->isInExternCContext()) in haveIncompatibleLanguageLinkages()
3429 if (OldLinkage == CLanguageLinkage && New->isInExternCXXContext()) in haveIncompatibleLanguageLinkages()
3443 ExpectedDecl *New) { in checkUsingShadowRedecl() argument
3464 New->getDeclContext()->getRedeclContext()) && in checkUsingShadowRedecl()
3465 !(isExternC(Old) && isExternC(New))) in checkUsingShadowRedecl()
3469 S.Diag(New->getLocation(), diag::err_using_decl_conflict_reverse); in checkUsingShadowRedecl()
3535 bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, in MergeFunctionDecl() argument
3541 if (New->getFriendObjectKind()) { in MergeFunctionDecl()
3542 Diag(New->getLocation(), diag::err_using_decl_friend); in MergeFunctionDecl()
3553 New->getDescribedFunctionTemplate()) { in MergeFunctionDecl()
3560 if (checkUsingShadowRedecl<FunctionDecl>(*this, Shadow, New)) in MergeFunctionDecl()
3565 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeFunctionDecl()
3566 << New->getDeclName(); in MergeFunctionDecl()
3567 notePreviousDefinition(OldD, New->getLocation()); in MergeFunctionDecl()
3574 adjustDeclContextForDeclaratorDecl(New, Old); in MergeFunctionDecl()
3582 Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName(); in MergeFunctionDecl()
3591 getNoteDiagForInvalidRedeclaration(Old, New); in MergeFunctionDecl()
3597 if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && in MergeFunctionDecl()
3598 New->getStorageClass() == SC_Static && in MergeFunctionDecl()
3600 !New->getTemplateSpecializationInfo() && in MergeFunctionDecl()
3603 Diag(New->getLocation(), diag::ext_static_non_static) << New; in MergeFunctionDecl()
3606 Diag(New->getLocation(), diag::err_static_non_static) << New; in MergeFunctionDecl()
3612 if (const auto *ILA = New->getAttr<InternalLinkageAttr>()) in MergeFunctionDecl()
3614 Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) in MergeFunctionDecl()
3617 New->dropAttr<InternalLinkageAttr>(); in MergeFunctionDecl()
3620 if (auto *EA = New->getAttr<ErrorAttr>()) { in MergeFunctionDecl()
3624 New->dropAttr<ErrorAttr>(); in MergeFunctionDecl()
3628 if (CheckRedeclarationInModule(New, Old)) in MergeFunctionDecl()
3633 if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) { in MergeFunctionDecl()
3634 Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch) in MergeFunctionDecl()
3635 << New << OldOvl; in MergeFunctionDecl()
3660 New->addAttr(OverloadableAttr::CreateImplicit(Context)); in MergeFunctionDecl()
3662 New->dropAttr<OverloadableAttr>(); in MergeFunctionDecl()
3668 if (IsInvalidSMECallConversion(Old->getType(), New->getType())) { in MergeFunctionDecl()
3669 Diag(New->getLocation(), diag::err_sme_attr_mismatch) in MergeFunctionDecl()
3670 << New->getType() << Old->getType(); in MergeFunctionDecl()
3689 QualType NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3701 bool NewCCExplicit = getCallingConvAttributedType(New->getType()); in MergeFunctionDecl()
3714 Diag(New->getLocation(), diag::warn_cconv_unsupported) in MergeFunctionDecl()
3722 Diag(New->getLocation(), diag::err_cconv_change) in MergeFunctionDecl()
3744 Diag(New->getLocation(), diag::err_regparm_mismatch) in MergeFunctionDecl()
3758 Diag(New->getLocation(), diag::err_function_attribute_mismatch) in MergeFunctionDecl()
3772 New->getAttr<AnyX86NoCallerSavedRegistersAttr>(); in MergeFunctionDecl()
3773 Diag(New->getLocation(), diag::err_function_attribute_mismatch) << Attr; in MergeFunctionDecl()
3783 const FunctionType *AdjustedType = New->getType()->getAs<FunctionType>(); in MergeFunctionDecl()
3785 New->setType(QualType(AdjustedType, 0)); in MergeFunctionDecl()
3786 NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3791 if (!Old->isInlined() && New->isInlined() && in MergeFunctionDecl()
3792 !New->hasAttr<GNUInlineAttr>() && in MergeFunctionDecl()
3795 !Old->isDefined() && !New->isThisDeclarationADefinition()) in MergeFunctionDecl()
3801 if (New->hasAttr<GNUInlineAttr>() && in MergeFunctionDecl()
3808 if (Old->getNumParams() > 0 && Old->getNumParams() == New->getNumParams() && in MergeFunctionDecl()
3809 !hasIdenticalPassObjectSizeAttrs(Old, New)) { in MergeFunctionDecl()
3810 Diag(New->getLocation(), diag::err_different_pass_object_size_params) in MergeFunctionDecl()
3811 << New->getDeclName(); in MergeFunctionDecl()
3819 const auto NewFX = New->getFunctionEffects(); in MergeFunctionDecl()
3823 if (Diff.shouldDiagnoseRedeclaration(*Old, OldFX, *New, NewFX)) { in MergeFunctionDecl()
3824 Diag(New->getLocation(), in MergeFunctionDecl()
3838 diagnoseFunctionEffectMergeConflicts(MergeErrs, New->getLocation(), in MergeFunctionDecl()
3846 New->setType(ModQT); in MergeFunctionDecl()
3847 NewQType = New->getType(); in MergeFunctionDecl()
3863 NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3871 QualType NewDeclaredReturnType = New->getDeclaredReturnType(); in MergeFunctionDecl()
3873 canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, in MergeFunctionDecl()
3881 if (New->isCXXClassMember() && New->isOutOfLine()) in MergeFunctionDecl()
3882 Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type) in MergeFunctionDecl()
3883 << New << New->getReturnTypeSourceRange(); in MergeFunctionDecl()
3885 Diag(New->getLocation(), diag::err_ovl_diff_return_type) in MergeFunctionDecl()
3886 << New->getReturnTypeSourceRange(); in MergeFunctionDecl()
3904 New->setType(SubstAutoTypeDependent(New->getType())); in MergeFunctionDecl()
3907 New->setType(SubstAutoType(New->getType(), DT)); in MergeFunctionDecl()
3914 CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New); in MergeFunctionDecl()
3933 Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member); in MergeFunctionDecl()
3953 Diag(New->getLocation(), NewDiag); in MergeFunctionDecl()
3955 Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) in MergeFunctionDecl()
3956 << New << New->getType(); in MergeFunctionDecl()
3972 << New << llvm::to_underlying(getSpecialMember(OldMethod)); in MergeFunctionDecl()
3993 if (CheckEquivalentExceptionSpec(Old, New)) in MergeFunctionDecl()
4000 if (const auto *NRA = New->getAttr<CXX11NoReturnAttr>()) in MergeFunctionDecl()
4011 const CarriesDependencyAttr *CDA = New->getAttr<CarriesDependencyAttr>(); in MergeFunctionDecl()
4033 if (haveIncompatibleLanguageLinkages(Old, New)) { in MergeFunctionDecl()
4042 if (New->getFriendObjectKind() != Decl::FOK_None) { in MergeFunctionDecl()
4043 Diag(New->getLocation(), diag::ext_retained_language_linkage) << New; in MergeFunctionDecl()
4046 Diag(New->getLocation(), diag::err_different_language_linkage) << New; in MergeFunctionDecl()
4058 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4063 if (!canFullyTypeCheckRedeclaration(New, Old, NewQType, OldQType)) in MergeFunctionDecl()
4084 if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && in MergeFunctionDecl()
4085 Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) { in MergeFunctionDecl()
4088 Diag(New->getLocation(), diag::err_conflicting_types) << New; in MergeFunctionDecl()
4103 if (New->hasWrittenPrototype() != Old->hasWrittenPrototype() && in MergeFunctionDecl()
4104 !New->isImplicit() && !Old->isImplicit()) { in MergeFunctionDecl()
4106 if (New->hasWrittenPrototype()) { in MergeFunctionDecl()
4107 WithProto = New; in MergeFunctionDecl()
4111 WithoutProto = New; in MergeFunctionDecl()
4119 if (WithoutProto == New) in MergeFunctionDecl()
4154 New->setType(NewQType); in MergeFunctionDecl()
4155 New->setHasInheritedPrototype(); in MergeFunctionDecl()
4161 Context, New, SourceLocation(), SourceLocation(), nullptr, in MergeFunctionDecl()
4168 New->setParams(Params); in MergeFunctionDecl()
4171 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4192 Old->hasPrototype() && !New->hasPrototype() && in MergeFunctionDecl()
4193 New->getType()->getAs<FunctionProtoType>() && in MergeFunctionDecl()
4194 Old->getNumParams() == New->getNumParams()) { in MergeFunctionDecl()
4200 = New->getType()->getAs<FunctionProtoType>(); in MergeFunctionDecl()
4209 ParmVarDecl *NewParm = New->getParamDecl(Idx); in MergeFunctionDecl()
4236 New->setType(Context.getFunctionType(MergedReturn, ArgTypes, in MergeFunctionDecl()
4238 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4254 Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New; in MergeFunctionDecl()
4263 Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName(); in MergeFunctionDecl()
4268 bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old, in MergeCompatibleFunctionDecls() argument
4271 mergeDeclAttributes(New, Old); in MergeCompatibleFunctionDecls()
4275 New->setIsPureVirtual(); in MergeCompatibleFunctionDecls()
4279 New->setIsUsed(); in MergeCompatibleFunctionDecls()
4283 if (New->getNumParams() == Old->getNumParams()) in MergeCompatibleFunctionDecls()
4284 for (unsigned i = 0, e = New->getNumParams(); i != e; ++i) { in MergeCompatibleFunctionDecls()
4285 ParmVarDecl *NewParam = New->getParamDecl(i); in MergeCompatibleFunctionDecls()
4292 return MergeCXXFunctionDecl(New, Old, S); in MergeCompatibleFunctionDecls()
4297 QualType Merged = Context.mergeTypes(Old->getType(), New->getType()); in MergeCompatibleFunctionDecls()
4299 New->setType(Merged); in MergeCompatibleFunctionDecls()
4327 static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl* Old) { in diagnoseVarDeclTypeMismatch() argument
4328 assert(!S.Context.hasSameType(New->getType(), Old->getType())); in diagnoseVarDeclTypeMismatch()
4330 S.Diag(New->getLocation(), New->isThisDeclarationADefinition() in diagnoseVarDeclTypeMismatch()
4333 << New->getDeclName() << New->getType() << Old->getType(); in diagnoseVarDeclTypeMismatch()
4338 = getNoteDiagForInvalidRedeclaration(Old, New); in diagnoseVarDeclTypeMismatch()
4340 New->setInvalidDecl(); in diagnoseVarDeclTypeMismatch()
4343 void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old, in MergeVarDeclTypes() argument
4345 …if (New->isInvalidDecl() || Old->isInvalidDecl() || New->getType()->containsErrors() || Old->getTy… in MergeVarDeclTypes()
4350 if (New->getType()->isUndeducedType()) { in MergeVarDeclTypes()
4353 } else if (Context.hasSameType(New->getType(), Old->getType())) { in MergeVarDeclTypes()
4355 return MergeVarDeclExceptionSpecs(New, Old); in MergeVarDeclTypes()
4362 else if (Old->getType()->isArrayType() && New->getType()->isArrayType()) { in MergeVarDeclTypes()
4364 const ArrayType *NewArray = Context.getAsArrayType(New->getType()); in MergeVarDeclTypes()
4376 if (!Context.hasSameType(New->getType(), PrevVDTy)) in MergeVarDeclTypes()
4377 return diagnoseVarDeclTypeMismatch(*this, New, PrevVD); in MergeVarDeclTypes()
4384 MergedT = New->getType(); in MergeVarDeclTypes()
4395 else if (New->getType()->isObjCObjectPointerType() && in MergeVarDeclTypes()
4397 MergedT = Context.mergeObjCGCQualifiers(New->getType(), in MergeVarDeclTypes()
4404 MergedT = Context.mergeTypes(New->getType(), Old->getType()); in MergeVarDeclTypes()
4412 if ((New->getType()->isDependentType() || in MergeVarDeclTypes()
4413 Old->getType()->isDependentType()) && New->isLocalVarDecl()) { in MergeVarDeclTypes()
4417 if (!New->getType()->isDependentType() && MergeTypeWithOld) in MergeVarDeclTypes()
4418 New->setType(Context.DependentTy); in MergeVarDeclTypes()
4421 return diagnoseVarDeclTypeMismatch(*this, New, Old); in MergeVarDeclTypes()
4427 New->setType(MergedT); in MergeVarDeclTypes()
4459 void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) { in MergeVarDecl() argument
4461 if (New->isInvalidDecl()) in MergeVarDecl()
4464 if (!shouldLinkPossiblyHiddenDecl(Previous, New)) in MergeVarDecl()
4467 VarTemplateDecl *NewTemplate = New->getDescribedVarTemplate(); in MergeVarDecl()
4480 return New->setInvalidDecl(); in MergeVarDecl()
4486 if (checkUsingShadowRedecl<VarDecl>(*this, Shadow, New)) in MergeVarDecl()
4487 return New->setInvalidDecl(); in MergeVarDecl()
4491 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeVarDecl()
4492 << New->getDeclName(); in MergeVarDecl()
4494 New->getLocation()); in MergeVarDecl()
4495 return New->setInvalidDecl(); in MergeVarDecl()
4500 adjustDeclContextForDeclaratorDecl(New, Old); in MergeVarDecl()
4507 return New->setInvalidDecl(); in MergeVarDecl()
4513 if (Old->isStaticDataMember() && !New->isOutOfLine()) { in MergeVarDecl()
4514 Diag(New->getLocation(), diag::err_duplicate_member) in MergeVarDecl()
4515 << New->getIdentifier(); in MergeVarDecl()
4517 New->setInvalidDecl(); in MergeVarDecl()
4520 mergeDeclAttributes(New, Old); in MergeVarDecl()
4523 if (New->hasAttr<WeakImportAttr>()) in MergeVarDecl()
4526 Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName(); in MergeVarDecl()
4529 New->dropAttr<WeakImportAttr>(); in MergeVarDecl()
4534 if (const auto *ILA = New->getAttr<InternalLinkageAttr>()) in MergeVarDecl()
4536 Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) in MergeVarDecl()
4539 New->dropAttr<InternalLinkageAttr>(); in MergeVarDecl()
4545 MergeVarDeclTypes(New, MostRecent, in MergeVarDecl()
4546 mergeTypeWithPrevious(*this, New, MostRecent, Previous)); in MergeVarDecl()
4547 if (New->isInvalidDecl()) in MergeVarDecl()
4551 MergeVarDeclTypes(New, Old, mergeTypeWithPrevious(*this, New, Old, Previous)); in MergeVarDecl()
4552 if (New->isInvalidDecl()) in MergeVarDecl()
4558 getNoteDiagForInvalidRedeclaration(Old, New); in MergeVarDecl()
4561 if (New->getStorageClass() == SC_Static && in MergeVarDecl()
4562 !New->isStaticDataMember() && in MergeVarDecl()
4565 Diag(New->getLocation(), diag::ext_static_non_static) in MergeVarDecl()
4566 << New->getDeclName(); in MergeVarDecl()
4569 Diag(New->getLocation(), diag::err_static_non_static) in MergeVarDecl()
4570 << New->getDeclName(); in MergeVarDecl()
4572 return New->setInvalidDecl(); in MergeVarDecl()
4584 if (New->hasExternalStorage() && Old->hasLinkage()) in MergeVarDecl()
4586 else if (New->getCanonicalDecl()->getStorageClass() != SC_Static && in MergeVarDecl()
4587 !New->isStaticDataMember() && in MergeVarDecl()
4589 Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName(); in MergeVarDecl()
4591 return New->setInvalidDecl(); in MergeVarDecl()
4595 if (New->hasExternalStorage() && in MergeVarDecl()
4597 Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName(); in MergeVarDecl()
4599 return New->setInvalidDecl(); in MergeVarDecl()
4601 if (Old->hasLinkage() && New->isLocalVarDeclOrParm() && in MergeVarDecl()
4602 !New->hasExternalStorage()) { in MergeVarDecl()
4603 Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName(); in MergeVarDecl()
4605 return New->setInvalidDecl(); in MergeVarDecl()
4608 if (CheckRedeclarationInModule(New, Old)) in MergeVarDecl()
4615 if (!New->hasExternalStorage() && !New->isFileVarDecl() && in MergeVarDecl()
4618 !New->getLexicalDeclContext()->isRecord())) { in MergeVarDecl()
4619 Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName(); in MergeVarDecl()
4621 return New->setInvalidDecl(); in MergeVarDecl()
4624 if (New->isInline() && !Old->getMostRecentDecl()->isInline()) { in MergeVarDecl()
4629 Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New; in MergeVarDecl()
4636 if (!Old->isInline() && New->isInline() && Old->isUsed(false) && in MergeVarDecl()
4637 !Old->getDefinition() && !New->isThisDeclarationADefinition()) in MergeVarDecl()
4641 if (New->getTLSKind() != Old->getTLSKind()) { in MergeVarDecl()
4643 Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName(); in MergeVarDecl()
4645 } else if (!New->getTLSKind()) { in MergeVarDecl()
4646 Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName(); in MergeVarDecl()
4653 Diag(New->getLocation(), diag::err_thread_thread_different_kind) in MergeVarDecl()
4654 << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic); in MergeVarDecl()
4664 Diag(New->getLocation(), in MergeVarDecl()
4666 } else if (New->isThisDeclarationADefinition() == VarDecl::Definition) { in MergeVarDecl()
4668 if (Def && checkVarDeclRedefinition(Def, New)) in MergeVarDecl()
4673 if (haveIncompatibleLanguageLinkages(Old, New)) { in MergeVarDecl()
4674 Diag(New->getLocation(), diag::err_different_language_linkage) << New; in MergeVarDecl()
4676 New->setInvalidDecl(); in MergeVarDecl()
4682 New->setIsUsed(); in MergeVarDecl()
4685 New->setPreviousDecl(Old); in MergeVarDecl()
4690 New->setAccess(Old->getAccess()); in MergeVarDecl()
4692 NewTemplate->setAccess(New->getAccess()); in MergeVarDecl()
4695 New->setImplicitlyInline(); in MergeVarDecl()
4698 void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) { in notePreviousDefinition() argument
4700 auto FNewDecLoc = SrcMgr.getDecomposedLoc(New); in notePreviousDefinition()
4753 bool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) { in checkVarDeclRedefinition() argument
4755 (New->getFormalLinkage() == Linkage::Internal || New->isInline() || in checkVarDeclRedefinition()
4756 isa<VarTemplateSpecializationDecl>(New) || in checkVarDeclRedefinition()
4757 New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || in checkVarDeclRedefinition()
4758 New->getDeclContext()->isDependentContext())) { in checkVarDeclRedefinition()
4761 New->demoteThisDefinitionToDeclaration(); in checkVarDeclRedefinition()
4769 Diag(New->getLocation(), diag::err_redefinition) << New; in checkVarDeclRedefinition()
4770 notePreviousDefinition(Old, New->getLocation()); in checkVarDeclRedefinition()
4771 New->setInvalidDecl(); in checkVarDeclRedefinition()
6390 NamedDecl *New; in HandleDeclarator() local
6399 New = ActOnTypedefDeclarator(S, D, DC, TInfo, Previous); in HandleDeclarator()
6401 New = ActOnFunctionDeclarator(S, D, DC, TInfo, Previous, in HandleDeclarator()
6405 New = ActOnVariableDeclarator(S, D, DC, TInfo, Previous, TemplateParamLists, in HandleDeclarator()
6409 if (!New) in HandleDeclarator()
6414 if (New->getDeclName() && AddToScope) in HandleDeclarator()
6415 PushOnScopeChains(New, S); in HandleDeclarator()
6418 OpenMP().checkDeclIsAllowedInOpenMPTarget(nullptr, New); in HandleDeclarator()
6420 return New; in HandleDeclarator()
11393 static bool MultiVersionTypesCompatible(FunctionDecl *Old, FunctionDecl *New) { in MultiVersionTypesCompatible() argument
11395 MultiVersionKind NewKind = New->getMultiVersionKind(); in MultiVersionTypesCompatible()
11592 [](const IdentifierInfo *Cur, const IdentifierInfo *New) { in CheckMultiVersionAdditionalDecl() argument
11593 return Cur->getName() == New->getName(); in CheckMultiVersionAdditionalDecl()
11612 [](const IdentifierInfo *Cur, const IdentifierInfo *New) { in CheckMultiVersionAdditionalDecl() argument
11613 return Cur->getName() == New->getName(); in CheckMultiVersionAdditionalDecl()
14974 ParmVarDecl *New = in ActOnParamDeclarator() local
14979 New->setInvalidDecl(); in ActOnParamDeclarator()
14981 CheckExplicitObjectParameter(*this, New, ExplicitThisLoc); in ActOnParamDeclarator()
14985 New->setScopeInfo(S->getFunctionPrototypeDepth() - 1, in ActOnParamDeclarator()
14989 S->AddDecl(New); in ActOnParamDeclarator()
14991 IdResolver.AddDecl(New); in ActOnParamDeclarator()
14993 ProcessDeclAttributes(S, New, D); in ActOnParamDeclarator()
14996 Diag(New->getLocation(), diag::err_module_private_local) in ActOnParamDeclarator()
14997 << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) in ActOnParamDeclarator()
15000 if (New->hasAttr<BlocksAttr>()) { in ActOnParamDeclarator()
15001 Diag(New->getLocation(), diag::err_block_on_nonlocal); in ActOnParamDeclarator()
15005 deduceOpenCLAddressSpace(New); in ActOnParamDeclarator()
15007 return New; in ActOnParamDeclarator()
15096 ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name, in CheckParameter() local
15103 if (New->isParameterPack()) in CheckParameter()
15105 LSI->LocalPacks.push_back(New); in CheckParameter()
15107 if (New->getType().hasNonTrivialToPrimitiveDestructCUnion() || in CheckParameter()
15108 New->getType().hasNonTrivialToPrimitiveCopyCUnion()) in CheckParameter()
15109 checkNonTrivialCUnion(New->getType(), New->getLocation(), in CheckParameter()
15121 New->setType(T); in CheckParameter()
15138 New->setInvalidDecl(); in CheckParameter()
15143 PPC().CheckPPCMMAType(New->getOriginalType(), New->getLocation())) { in CheckParameter()
15144 New->setInvalidDecl(); in CheckParameter()
15147 return New; in CheckParameter()
17137 TagDecl *New = nullptr; in ActOnTag() local
17140 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, nullptr, in ActOnTag()
17146 EnumDecl *ED = cast<EnumDecl>(New); in ActOnTag()
17157 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
17161 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) { in ActOnTag()
17177 New->setLexicalDeclContext(CurContext); in ActOnTag()
17178 return New; in ActOnTag()
17612 SkipBody->New = createTagFromNewDecl(); in ActOnTag()
17745 TagDecl *New; in ActOnTag() local
17750 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, in ActOnTag()
17755 StdAlignValT = cast<EnumDecl>(New); in ActOnTag()
17760 if (IsFixed && cast<EnumDecl>(New)->isFixed()) { in ActOnTag()
17766 << New; in ActOnTag()
17779 EnumDecl *ED = cast<EnumDecl>(New); in ActOnTag()
17797 New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
17801 StdBadAlloc = cast<CXXRecordDecl>(New); in ActOnTag()
17803 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
17810 Diag(New->getLocation(), diag::ext_type_defined_in_offsetof) in ActOnTag()
17811 << (OOK == OOK_Macro) << New->getSourceRange(); in ActOnTag()
17818 Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) in ActOnTag()
17819 << Context.getTagDeclType(New); in ActOnTag()
17825 Diag(New->getLocation(), diag::err_type_defined_in_enum) in ActOnTag()
17826 << Context.getTagDeclType(New); in ActOnTag()
17841 New->setQualifierInfo(SS.getWithLocInContext(Context)); in ActOnTag()
17843 New->setTemplateParameterListsInfo(Context, TemplateParameterLists); in ActOnTag()
17850 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) { in ActOnTag()
17868 Diag(New->getLocation(), diag::err_module_private_specialization) in ActOnTag()
17875 New->setModulePrivate(); in ActOnTag()
17880 if (isMemberSpecialization && CheckMemberSpecialization(New, Previous)) in ActOnTag()
17897 Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New); in ActOnTag()
17902 New->setInvalidDecl(); in ActOnTag()
17906 New->setLexicalDeclContext(CurContext); in ActOnTag()
17913 New->setObjectOfFriendDecl(getLangOpts().MSVCCompat); in ActOnTag()
17917 SetMemberAccessSpecifier(New, PrevDecl, AS); in ActOnTag()
17920 CheckRedeclarationInModule(New, PrevDecl); in ActOnTag()
17923 New->startDefinition(); in ActOnTag()
17925 ProcessDeclAttributeList(S, New, Attrs); in ActOnTag()
17926 AddPragmaAttributes(S, New); in ActOnTag()
17933 New->setAccess(PrevDecl->getAccess()); in ActOnTag()
17935 DeclContext *DC = New->getDeclContext()->getRedeclContext(); in ActOnTag()
17936 DC->makeDeclVisibleInContext(New); in ActOnTag()
17939 PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false); in ActOnTag()
17942 PushOnScopeChains(New, S, true); in ActOnTag()
17944 CurContext->addDecl(New); in ActOnTag()
17948 if (IdentifierInfo *II = New->getIdentifier()) in ActOnTag()
17949 if (!New->isInvalidDecl() && in ActOnTag()
17950 New->getDeclContext()->getRedeclContext()->isTranslationUnit() && in ActOnTag()
17952 Context.setFILEDecl(New); in ActOnTag()
17955 mergeDeclAttributes(New, PrevDecl); in ActOnTag()
17957 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(New)) { in ActOnTag()
17964 AddPushedVisibilityAttribute(New); in ActOnTag()
17966 if (isMemberSpecialization && !New->isInvalidDecl()) in ActOnTag()
17967 CompleteMemberSpecialization(New, Previous); in ActOnTag()
17973 if (New->isBeingDefined()) in ActOnTag()
17974 if (auto RD = dyn_cast<RecordDecl>(New)) in ActOnTag()
17980 return New; in ActOnTag()
17999 if (!hasStructuralCompatLayout(Prev, SkipBody.New)) in ActOnDuplicateDefinition()
19614 EnumConstantDecl *New = in ActOnEnumConstant() local
19616 if (!New) in ActOnEnumConstant()
19622 CheckShadow(New, PrevDecl, R); in ActOnEnumConstant()
19640 ProcessDeclAttributeList(S, New, Attrs); in ActOnEnumConstant()
19641 AddPragmaAttributes(S, New); in ActOnEnumConstant()
19642 ProcessAPINotes(New); in ActOnEnumConstant()
19645 New->setAccess(TheEnumDecl->getAccess()); in ActOnEnumConstant()
19646 PushOnScopeChains(New, S); in ActOnEnumConstant()
19648 ActOnDocumentableDecl(New); in ActOnEnumConstant()
19650 return New; in ActOnEnumConstant()
20082 FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext, in ActOnFileScopeAsmDecl() local
20085 CurContext->addDecl(New); in ActOnFileScopeAsmDecl()
20086 return New; in ActOnFileScopeAsmDecl()
20090 auto *New = TopLevelStmtDecl::Create(Context, /*Statement=*/nullptr); in ActOnStartTopLevelStmtDecl() local
20091 CurContext->addDecl(New); in ActOnStartTopLevelStmtDecl()
20092 PushDeclContext(S, New); in ActOnStartTopLevelStmtDecl()
20095 return New; in ActOnStartTopLevelStmtDecl()