Lines Matching refs:New
1537 const FunctionDecl *New) { in AllowOverloadingOfFunction() argument
1538 if (Context.getLangOpts().CPlusPlus || New->hasAttr<OverloadableAttr>()) in AllowOverloadingOfFunction()
1663 bool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationModuleOwnership() argument
1671 if (New->getFriendObjectKind() && in CheckRedeclarationModuleOwnership()
1672 Old->getOwningModuleForLinkage() != New->getOwningModuleForLinkage()) { in CheckRedeclarationModuleOwnership()
1673 New->setLocalOwningModule(Old->getOwningModule()); in CheckRedeclarationModuleOwnership()
1674 makeMergedDefinitionVisible(New); in CheckRedeclarationModuleOwnership()
1678 Module *NewM = New->getOwningModule(); in CheckRedeclarationModuleOwnership()
1709 Diag(New->getLocation(), diag::err_mismatched_owning_module) in CheckRedeclarationModuleOwnership()
1710 << New in CheckRedeclarationModuleOwnership()
1716 New->setInvalidDecl(); in CheckRedeclarationModuleOwnership()
1726 bool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationExported() argument
1732 if (!New->getLexicalDeclContext() in CheckRedeclarationExported()
1740 bool IsNewExported = New->isInExportDeclContext(); in CheckRedeclarationExported()
1758 Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S; in CheckRedeclarationExported()
1765 bool Sema::CheckRedeclarationInModule(NamedDecl *New, NamedDecl *Old) { in CheckRedeclarationInModule() argument
1766 if (CheckRedeclarationModuleOwnership(New, Old)) in CheckRedeclarationInModule()
1769 if (CheckRedeclarationExported(New, Old)) in CheckRedeclarationInModule()
1791 bool Sema::IsRedefinitionInModule(const NamedDecl *New, in IsRedefinitionInModule() argument
1793 assert(getASTContext().isSameEntity(New, Old) && in IsRedefinitionInModule()
1796 assert(const_cast<Sema *>(this)->isReachable(New) && in IsRedefinitionInModule()
1800 Module *NewM = New->getOwningModule(); in IsRedefinitionInModule()
2440 FunctionDecl *New = FunctionDecl::Create(Context, Parent, Loc, Loc, II, Type, in CreateBuiltin() local
2444 New->setImplicit(); in CreateBuiltin()
2445 New->addAttr(BuiltinAttr::CreateImplicit(Context, ID)); in CreateBuiltin()
2453 Context, New, SourceLocation(), SourceLocation(), nullptr, in CreateBuiltin()
2458 New->setParams(Params); in CreateBuiltin()
2461 AddKnownFunctionAttributes(New); in CreateBuiltin()
2462 return New; in CreateBuiltin()
2516 FunctionDecl *New = CreateBuiltin(II, R, ID, Loc); in LazilyCreateBuiltin() local
2517 RegisterLocallyScopedExternCDecl(New, S); in LazilyCreateBuiltin()
2524 CurContext = New->getDeclContext(); in LazilyCreateBuiltin()
2525 PushOnScopeChains(New, TUScope); in LazilyCreateBuiltin()
2527 return New; in LazilyCreateBuiltin()
2573 bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) { in isIncompatibleTypedef() argument
2579 QualType NewType = New->getUnderlyingType(); in isIncompatibleTypedef()
2584 Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) in isIncompatibleTypedef()
2587 notePreviousDefinition(Old, New->getLocation()); in isIncompatibleTypedef()
2588 New->setInvalidDecl(); in isIncompatibleTypedef()
2597 Diag(New->getLocation(), diag::err_redefinition_different_typedef) in isIncompatibleTypedef()
2600 notePreviousDefinition(Old, New->getLocation()); in isIncompatibleTypedef()
2601 New->setInvalidDecl(); in isIncompatibleTypedef()
2612 void Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, in MergeTypedefNameDecl() argument
2616 if (New->isInvalidDecl()) return; in MergeTypedefNameDecl()
2621 const IdentifierInfo *TypeID = New->getIdentifier(); in MergeTypedefNameDecl()
2628 QualType T = New->getUnderlyingType(); in MergeTypedefNameDecl()
2638 New->setTypeForDecl(Context.getObjCIdType().getTypePtr()); in MergeTypedefNameDecl()
2644 Context.setObjCClassRedefinitionType(New->getUnderlyingType()); in MergeTypedefNameDecl()
2646 New->setTypeForDecl(Context.getObjCClassType().getTypePtr()); in MergeTypedefNameDecl()
2651 Context.setObjCSelRedefinitionType(New->getUnderlyingType()); in MergeTypedefNameDecl()
2653 New->setTypeForDecl(Context.getObjCSelType().getTypePtr()); in MergeTypedefNameDecl()
2662 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeTypedefNameDecl()
2663 << New->getDeclName(); in MergeTypedefNameDecl()
2667 notePreviousDefinition(OldD, New->getLocation()); in MergeTypedefNameDecl()
2669 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2674 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2678 auto *NewTag = New->getAnonDeclWithTypedefName(); in MergeTypedefNameDecl()
2685 New->setTypeForDecl(OldTD->getTypeForDecl()); in MergeTypedefNameDecl()
2687 New->setModedTypeSourceInfo(OldTD->getTypeSourceInfo(), in MergeTypedefNameDecl()
2690 New->setTypeSourceInfo(OldTD->getTypeSourceInfo()); in MergeTypedefNameDecl()
2712 if (isIncompatibleTypedef(Old, New)) in MergeTypedefNameDecl()
2718 New->setPreviousDecl(Typedef); in MergeTypedefNameDecl()
2719 mergeDeclAttributes(New, Old); in MergeTypedefNameDecl()
2757 Diag(New->getLocation(), diag::err_redefinition) in MergeTypedefNameDecl()
2758 << New->getDeclName(); in MergeTypedefNameDecl()
2759 notePreviousDefinition(Old, New->getLocation()); in MergeTypedefNameDecl()
2760 return New->setInvalidDecl(); in MergeTypedefNameDecl()
2775 Context.getSourceManager().isInSystemHeader(New->getLocation()))) in MergeTypedefNameDecl()
2778 Diag(New->getLocation(), diag::ext_redefinition_of_typedef) in MergeTypedefNameDecl()
2779 << New->getDeclName(); in MergeTypedefNameDecl()
2780 notePreviousDefinition(Old, New->getLocation()); in MergeTypedefNameDecl()
2816 static bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) { in mergeAlignedAttrs() argument
2845 for (auto *I : New->specific_attrs<AlignedAttr>()) { in mergeAlignedAttrs()
2867 if (ValueDecl *VD = dyn_cast<ValueDecl>(New)) in mergeAlignedAttrs()
2870 Ty = S.Context.getTagDeclType(cast<TagDecl>(New)); in mergeAlignedAttrs()
2886 if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) { in mergeAlignedAttrs()
2895 S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition) in mergeAlignedAttrs()
2907 New->addAttr(Clone); in mergeAlignedAttrs()
2916 New->addAttr(Clone); in mergeAlignedAttrs()
3052 static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) { in checkNewAttributesAfterDef() argument
3053 if (!New->hasAttrs()) in checkNewAttributesAfterDef()
3057 if (!Def || Def == New) in checkNewAttributesAfterDef()
3060 AttrVec &NewAttributes = New->getAttrs(); in checkNewAttributesAfterDef()
3065 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) { in checkNewAttributesAfterDef()
3076 VarDecl *VD = cast<VarDecl>(New); in checkNewAttributesAfterDef()
3144 cast<VarDecl>(New)->isInline() && in checkNewAttributesAfterDef()
3145 !cast<VarDecl>(New)->isInlineSpecified()) { in checkNewAttributesAfterDef()
3220 void Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, in mergeDeclAttributes() argument
3225 New->addAttr(NewAttr); in mergeDeclAttributes()
3230 New->addAttr(NewAttr); in mergeDeclAttributes()
3233 if (!Old->hasAttrs() && !New->hasAttrs()) in mergeDeclAttributes()
3240 const auto *NewConstInit = New->getAttr<ConstInitAttr>(); in mergeDeclAttributes()
3243 auto *NewVD = cast<VarDecl>(New); in mergeDeclAttributes()
3272 checkNewAttributesAfterDef(*this, New, Old); in mergeDeclAttributes()
3274 if (AsmLabelAttr *NewA = New->getAttr<AsmLabelAttr>()) { in mergeDeclAttributes()
3278 Diag(New->getLocation(), diag::err_different_asm_label); in mergeDeclAttributes()
3284 Diag(New->getLocation(), diag::err_late_asm_label_name) in mergeDeclAttributes()
3285 << isa<FunctionDecl>(Old) << New->getAttr<AsmLabelAttr>()->getRange(); in mergeDeclAttributes()
3290 if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) { in mergeDeclAttributes()
3307 if (New->hasAttr<SectionAttr>() && !Old->hasAttr<SectionAttr>()) { in mergeDeclAttributes()
3308 if (auto *VD = dyn_cast<VarDecl>(New)) { in mergeDeclAttributes()
3310 Diag(New->getLocation(), diag::warn_attribute_section_on_redeclaration); in mergeDeclAttributes()
3317 const auto *NewCSA = New->getAttr<CodeSegAttr>(); in mergeDeclAttributes()
3319 !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) { in mergeDeclAttributes()
3320 Diag(New->getLocation(), diag::warn_mismatched_section) in mergeDeclAttributes()
3328 bool foundAny = New->hasAttrs(); in mergeDeclAttributes()
3332 if (!foundAny) New->setAttrs(AttrVec()); in mergeDeclAttributes()
3357 if (mergeDeclAttribute(*this, New, I, LocalAMK)) in mergeDeclAttributes()
3361 if (mergeAlignedAttrs(*this, New, Old)) in mergeDeclAttributes()
3364 if (!foundAny) New->dropAttrs(); in mergeDeclAttributes()
3432 static bool EquivalentArrayTypes(QualType Old, QualType New, in EquivalentArrayTypes() argument
3444 if (NoSizeInfo(Old) && NoSizeInfo(New)) in EquivalentArrayTypes()
3448 if (Old->isVariableArrayType() && New->isVariableArrayType()) { in EquivalentArrayTypes()
3450 const auto *NewVAT = Ctx.getAsVariableArrayType(New); in EquivalentArrayTypes()
3458 if (Old->isConstantArrayType() && New->isConstantArrayType()) { in EquivalentArrayTypes()
3460 Ctx.getAsConstantArrayType(New)->getSize(); in EquivalentArrayTypes()
3464 if (Old->isDependentSizedArrayType() && New->isDependentSizedArrayType()) { in EquivalentArrayTypes()
3468 return Old == New; in EquivalentArrayTypes()
3527 getNoteDiagForInvalidRedeclaration(const T *Old, const T *New) { in getNoteDiagForInvalidRedeclaration() argument
3539 OldLocation = New->getLocation(); in getNoteDiagForInvalidRedeclaration()
3564 static bool haveIncompatibleLanguageLinkages(const T *Old, const T *New) { in haveIncompatibleLanguageLinkages() argument
3570 if (OldLinkage == CXXLanguageLinkage && New->isInExternCContext()) in haveIncompatibleLanguageLinkages()
3572 if (OldLinkage == CLanguageLinkage && New->isInExternCXXContext()) in haveIncompatibleLanguageLinkages()
3586 ExpectedDecl *New) { in checkUsingShadowRedecl() argument
3607 New->getDeclContext()->getRedeclContext()) && in checkUsingShadowRedecl()
3608 !(isExternC(Old) && isExternC(New))) in checkUsingShadowRedecl()
3612 S.Diag(New->getLocation(), diag::err_using_decl_conflict_reverse); in checkUsingShadowRedecl()
3689 bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, in MergeFunctionDecl() argument
3695 if (New->getFriendObjectKind()) { in MergeFunctionDecl()
3696 Diag(New->getLocation(), diag::err_using_decl_friend); in MergeFunctionDecl()
3707 New->getDescribedFunctionTemplate()) { in MergeFunctionDecl()
3714 if (checkUsingShadowRedecl<FunctionDecl>(*this, Shadow, New)) in MergeFunctionDecl()
3719 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeFunctionDecl()
3720 << New->getDeclName(); in MergeFunctionDecl()
3721 notePreviousDefinition(OldD, New->getLocation()); in MergeFunctionDecl()
3728 adjustDeclContextForDeclaratorDecl(New, Old); in MergeFunctionDecl()
3736 Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName(); in MergeFunctionDecl()
3745 getNoteDiagForInvalidRedeclaration(Old, New); in MergeFunctionDecl()
3751 if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && in MergeFunctionDecl()
3752 New->getStorageClass() == SC_Static && in MergeFunctionDecl()
3754 !New->getTemplateSpecializationInfo() && in MergeFunctionDecl()
3757 Diag(New->getLocation(), diag::ext_static_non_static) << New; in MergeFunctionDecl()
3760 Diag(New->getLocation(), diag::err_static_non_static) << New; in MergeFunctionDecl()
3766 if (const auto *ILA = New->getAttr<InternalLinkageAttr>()) in MergeFunctionDecl()
3768 Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) in MergeFunctionDecl()
3771 New->dropAttr<InternalLinkageAttr>(); in MergeFunctionDecl()
3774 if (auto *EA = New->getAttr<ErrorAttr>()) { in MergeFunctionDecl()
3778 New->dropAttr<ErrorAttr>(); in MergeFunctionDecl()
3782 if (CheckRedeclarationInModule(New, Old)) in MergeFunctionDecl()
3787 if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) { in MergeFunctionDecl()
3788 Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch) in MergeFunctionDecl()
3789 << New << OldOvl; in MergeFunctionDecl()
3814 New->addAttr(OverloadableAttr::CreateImplicit(Context)); in MergeFunctionDecl()
3816 New->dropAttr<OverloadableAttr>(); in MergeFunctionDecl()
3822 if (IsInvalidSMECallConversion(Old->getType(), New->getType())) { in MergeFunctionDecl()
3823 Diag(New->getLocation(), diag::err_sme_attr_mismatch) in MergeFunctionDecl()
3824 << New->getType() << Old->getType(); in MergeFunctionDecl()
3843 QualType NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3855 bool NewCCExplicit = getCallingConvAttributedType(New->getType()); in MergeFunctionDecl()
3868 Diag(New->getLocation(), diag::warn_cconv_unsupported) in MergeFunctionDecl()
3876 Diag(New->getLocation(), diag::err_cconv_change) in MergeFunctionDecl()
3898 Diag(New->getLocation(), diag::err_regparm_mismatch) in MergeFunctionDecl()
3912 Diag(New->getLocation(), diag::err_function_attribute_mismatch) in MergeFunctionDecl()
3926 New->getAttr<AnyX86NoCallerSavedRegistersAttr>(); in MergeFunctionDecl()
3927 Diag(New->getLocation(), diag::err_function_attribute_mismatch) << Attr; in MergeFunctionDecl()
3937 const FunctionType *AdjustedType = New->getType()->getAs<FunctionType>(); in MergeFunctionDecl()
3939 New->setType(QualType(AdjustedType, 0)); in MergeFunctionDecl()
3940 NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3945 if (!Old->isInlined() && New->isInlined() && in MergeFunctionDecl()
3946 !New->hasAttr<GNUInlineAttr>() && in MergeFunctionDecl()
3949 !Old->isDefined() && !New->isThisDeclarationADefinition()) in MergeFunctionDecl()
3955 if (New->hasAttr<GNUInlineAttr>() && in MergeFunctionDecl()
3962 if (Old->getNumParams() > 0 && Old->getNumParams() == New->getNumParams() && in MergeFunctionDecl()
3963 !hasIdenticalPassObjectSizeAttrs(Old, New)) { in MergeFunctionDecl()
3964 Diag(New->getLocation(), diag::err_different_pass_object_size_params) in MergeFunctionDecl()
3965 << New->getDeclName(); in MergeFunctionDecl()
3972 NewQType = Context.getCanonicalType(New->getType()); in MergeFunctionDecl()
3980 QualType NewDeclaredReturnType = New->getDeclaredReturnType(); in MergeFunctionDecl()
3982 canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, in MergeFunctionDecl()
3990 if (New->isCXXClassMember() && New->isOutOfLine()) in MergeFunctionDecl()
3991 Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type) in MergeFunctionDecl()
3992 << New << New->getReturnTypeSourceRange(); in MergeFunctionDecl()
3994 Diag(New->getLocation(), diag::err_ovl_diff_return_type) in MergeFunctionDecl()
3995 << New->getReturnTypeSourceRange(); in MergeFunctionDecl()
4013 New->setType(SubstAutoTypeDependent(New->getType())); in MergeFunctionDecl()
4016 New->setType(SubstAutoType(New->getType(), DT)); in MergeFunctionDecl()
4023 CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New); in MergeFunctionDecl()
4042 Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member); in MergeFunctionDecl()
4062 Diag(New->getLocation(), NewDiag); in MergeFunctionDecl()
4064 Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) in MergeFunctionDecl()
4065 << New << New->getType(); in MergeFunctionDecl()
4081 << New << getSpecialMember(OldMethod); in MergeFunctionDecl()
4102 if (CheckEquivalentExceptionSpec(Old, New)) in MergeFunctionDecl()
4109 if (const auto *NRA = New->getAttr<CXX11NoReturnAttr>()) in MergeFunctionDecl()
4120 const CarriesDependencyAttr *CDA = New->getAttr<CarriesDependencyAttr>(); in MergeFunctionDecl()
4143 if (haveIncompatibleLanguageLinkages(Old, New)) { in MergeFunctionDecl()
4152 if (New->getFriendObjectKind() != Decl::FOK_None) { in MergeFunctionDecl()
4153 Diag(New->getLocation(), diag::ext_retained_language_linkage) << New; in MergeFunctionDecl()
4156 Diag(New->getLocation(), diag::err_different_language_linkage) << New; in MergeFunctionDecl()
4168 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4173 if (!canFullyTypeCheckRedeclaration(New, Old, NewQType, OldQType)) in MergeFunctionDecl()
4194 if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && in MergeFunctionDecl()
4195 Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) { in MergeFunctionDecl()
4198 Diag(New->getLocation(), diag::err_conflicting_types) << New; in MergeFunctionDecl()
4213 if (New->hasWrittenPrototype() != Old->hasWrittenPrototype() && in MergeFunctionDecl()
4214 !New->isImplicit() && !Old->isImplicit()) { in MergeFunctionDecl()
4216 if (New->hasWrittenPrototype()) { in MergeFunctionDecl()
4217 WithProto = New; in MergeFunctionDecl()
4221 WithoutProto = New; in MergeFunctionDecl()
4229 if (WithoutProto == New) in MergeFunctionDecl()
4264 New->setType(NewQType); in MergeFunctionDecl()
4265 New->setHasInheritedPrototype(); in MergeFunctionDecl()
4271 Context, New, SourceLocation(), SourceLocation(), nullptr, in MergeFunctionDecl()
4278 New->setParams(Params); in MergeFunctionDecl()
4281 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4302 Old->hasPrototype() && !New->hasPrototype() && in MergeFunctionDecl()
4303 New->getType()->getAs<FunctionProtoType>() && in MergeFunctionDecl()
4304 Old->getNumParams() == New->getNumParams()) { in MergeFunctionDecl()
4310 = New->getType()->getAs<FunctionProtoType>(); in MergeFunctionDecl()
4319 ParmVarDecl *NewParm = New->getParamDecl(Idx); in MergeFunctionDecl()
4346 New->setType(Context.getFunctionType(MergedReturn, ArgTypes, in MergeFunctionDecl()
4348 return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld); in MergeFunctionDecl()
4364 Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New; in MergeFunctionDecl()
4373 Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName(); in MergeFunctionDecl()
4387 bool Sema::MergeCompatibleFunctionDecls(FunctionDecl *New, FunctionDecl *Old, in MergeCompatibleFunctionDecls() argument
4390 mergeDeclAttributes(New, Old); in MergeCompatibleFunctionDecls()
4394 New->setIsPureVirtual(); in MergeCompatibleFunctionDecls()
4398 New->setIsUsed(); in MergeCompatibleFunctionDecls()
4402 if (New->getNumParams() == Old->getNumParams()) in MergeCompatibleFunctionDecls()
4403 for (unsigned i = 0, e = New->getNumParams(); i != e; ++i) { in MergeCompatibleFunctionDecls()
4404 ParmVarDecl *NewParam = New->getParamDecl(i); in MergeCompatibleFunctionDecls()
4411 return MergeCXXFunctionDecl(New, Old, S); in MergeCompatibleFunctionDecls()
4416 QualType Merged = Context.mergeTypes(Old->getType(), New->getType()); in MergeCompatibleFunctionDecls()
4418 New->setType(Merged); in MergeCompatibleFunctionDecls()
4446 static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl* Old) { in diagnoseVarDeclTypeMismatch() argument
4447 assert(!S.Context.hasSameType(New->getType(), Old->getType())); in diagnoseVarDeclTypeMismatch()
4449 S.Diag(New->getLocation(), New->isThisDeclarationADefinition() in diagnoseVarDeclTypeMismatch()
4452 << New->getDeclName() << New->getType() << Old->getType(); in diagnoseVarDeclTypeMismatch()
4457 = getNoteDiagForInvalidRedeclaration(Old, New); in diagnoseVarDeclTypeMismatch()
4459 New->setInvalidDecl(); in diagnoseVarDeclTypeMismatch()
4469 void Sema::MergeVarDeclTypes(VarDecl *New, VarDecl *Old, in MergeVarDeclTypes() argument
4471 …if (New->isInvalidDecl() || Old->isInvalidDecl() || New->getType()->containsErrors() || Old->getTy… in MergeVarDeclTypes()
4476 if (New->getType()->isUndeducedType()) { in MergeVarDeclTypes()
4479 } else if (Context.hasSameType(New->getType(), Old->getType())) { in MergeVarDeclTypes()
4481 return MergeVarDeclExceptionSpecs(New, Old); in MergeVarDeclTypes()
4488 else if (Old->getType()->isArrayType() && New->getType()->isArrayType()) { in MergeVarDeclTypes()
4490 const ArrayType *NewArray = Context.getAsArrayType(New->getType()); in MergeVarDeclTypes()
4502 if (!Context.hasSameType(New->getType(), PrevVDTy)) in MergeVarDeclTypes()
4503 return diagnoseVarDeclTypeMismatch(*this, New, PrevVD); in MergeVarDeclTypes()
4510 MergedT = New->getType(); in MergeVarDeclTypes()
4521 else if (New->getType()->isObjCObjectPointerType() && in MergeVarDeclTypes()
4523 MergedT = Context.mergeObjCGCQualifiers(New->getType(), in MergeVarDeclTypes()
4530 MergedT = Context.mergeTypes(New->getType(), Old->getType()); in MergeVarDeclTypes()
4538 if ((New->getType()->isDependentType() || in MergeVarDeclTypes()
4539 Old->getType()->isDependentType()) && New->isLocalVarDecl()) { in MergeVarDeclTypes()
4543 if (!New->getType()->isDependentType() && MergeTypeWithOld) in MergeVarDeclTypes()
4544 New->setType(Context.DependentTy); in MergeVarDeclTypes()
4547 return diagnoseVarDeclTypeMismatch(*this, New, Old); in MergeVarDeclTypes()
4553 New->setType(MergedT); in MergeVarDeclTypes()
4593 void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) { in MergeVarDecl() argument
4595 if (New->isInvalidDecl()) in MergeVarDecl()
4598 if (!shouldLinkPossiblyHiddenDecl(Previous, New)) in MergeVarDecl()
4601 VarTemplateDecl *NewTemplate = New->getDescribedVarTemplate(); in MergeVarDecl()
4614 return New->setInvalidDecl(); in MergeVarDecl()
4620 if (checkUsingShadowRedecl<VarDecl>(*this, Shadow, New)) in MergeVarDecl()
4621 return New->setInvalidDecl(); in MergeVarDecl()
4625 Diag(New->getLocation(), diag::err_redefinition_different_kind) in MergeVarDecl()
4626 << New->getDeclName(); in MergeVarDecl()
4628 New->getLocation()); in MergeVarDecl()
4629 return New->setInvalidDecl(); in MergeVarDecl()
4634 adjustDeclContextForDeclaratorDecl(New, Old); in MergeVarDecl()
4641 return New->setInvalidDecl(); in MergeVarDecl()
4647 if (Old->isStaticDataMember() && !New->isOutOfLine()) { in MergeVarDecl()
4648 Diag(New->getLocation(), diag::err_duplicate_member) in MergeVarDecl()
4649 << New->getIdentifier(); in MergeVarDecl()
4651 New->setInvalidDecl(); in MergeVarDecl()
4654 mergeDeclAttributes(New, Old); in MergeVarDecl()
4657 if (New->hasAttr<WeakImportAttr>() && in MergeVarDecl()
4660 Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName(); in MergeVarDecl()
4663 New->dropAttr<WeakImportAttr>(); in MergeVarDecl()
4666 if (const auto *ILA = New->getAttr<InternalLinkageAttr>()) in MergeVarDecl()
4668 Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) in MergeVarDecl()
4671 New->dropAttr<InternalLinkageAttr>(); in MergeVarDecl()
4677 MergeVarDeclTypes(New, MostRecent, in MergeVarDecl()
4678 mergeTypeWithPrevious(*this, New, MostRecent, Previous)); in MergeVarDecl()
4679 if (New->isInvalidDecl()) in MergeVarDecl()
4683 MergeVarDeclTypes(New, Old, mergeTypeWithPrevious(*this, New, Old, Previous)); in MergeVarDecl()
4684 if (New->isInvalidDecl()) in MergeVarDecl()
4690 getNoteDiagForInvalidRedeclaration(Old, New); in MergeVarDecl()
4693 if (New->getStorageClass() == SC_Static && in MergeVarDecl()
4694 !New->isStaticDataMember() && in MergeVarDecl()
4697 Diag(New->getLocation(), diag::ext_static_non_static) in MergeVarDecl()
4698 << New->getDeclName(); in MergeVarDecl()
4701 Diag(New->getLocation(), diag::err_static_non_static) in MergeVarDecl()
4702 << New->getDeclName(); in MergeVarDecl()
4704 return New->setInvalidDecl(); in MergeVarDecl()
4716 if (New->hasExternalStorage() && Old->hasLinkage()) in MergeVarDecl()
4718 else if (New->getCanonicalDecl()->getStorageClass() != SC_Static && in MergeVarDecl()
4719 !New->isStaticDataMember() && in MergeVarDecl()
4721 Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName(); in MergeVarDecl()
4723 return New->setInvalidDecl(); in MergeVarDecl()
4727 if (New->hasExternalStorage() && in MergeVarDecl()
4729 Diag(New->getLocation(), diag::err_extern_non_extern) << New->getDeclName(); in MergeVarDecl()
4731 return New->setInvalidDecl(); in MergeVarDecl()
4733 if (Old->hasLinkage() && New->isLocalVarDeclOrParm() && in MergeVarDecl()
4734 !New->hasExternalStorage()) { in MergeVarDecl()
4735 Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName(); in MergeVarDecl()
4737 return New->setInvalidDecl(); in MergeVarDecl()
4740 if (CheckRedeclarationInModule(New, Old)) in MergeVarDecl()
4747 if (!New->hasExternalStorage() && !New->isFileVarDecl() && in MergeVarDecl()
4750 !New->getLexicalDeclContext()->isRecord())) { in MergeVarDecl()
4751 Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName(); in MergeVarDecl()
4753 return New->setInvalidDecl(); in MergeVarDecl()
4756 if (New->isInline() && !Old->getMostRecentDecl()->isInline()) { in MergeVarDecl()
4761 Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New; in MergeVarDecl()
4768 if (!Old->isInline() && New->isInline() && Old->isUsed(false) && in MergeVarDecl()
4769 !Old->getDefinition() && !New->isThisDeclarationADefinition()) in MergeVarDecl()
4773 if (New->getTLSKind() != Old->getTLSKind()) { in MergeVarDecl()
4775 Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName(); in MergeVarDecl()
4777 } else if (!New->getTLSKind()) { in MergeVarDecl()
4778 Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName(); in MergeVarDecl()
4785 Diag(New->getLocation(), diag::err_thread_thread_different_kind) in MergeVarDecl()
4786 << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic); in MergeVarDecl()
4796 Diag(New->getLocation(), in MergeVarDecl()
4798 } else if (New->isThisDeclarationADefinition() == VarDecl::Definition) { in MergeVarDecl()
4800 if (Def && checkVarDeclRedefinition(Def, New)) in MergeVarDecl()
4805 if (haveIncompatibleLanguageLinkages(Old, New)) { in MergeVarDecl()
4806 Diag(New->getLocation(), diag::err_different_language_linkage) << New; in MergeVarDecl()
4808 New->setInvalidDecl(); in MergeVarDecl()
4814 New->setIsUsed(); in MergeVarDecl()
4817 New->setPreviousDecl(Old); in MergeVarDecl()
4822 New->setAccess(Old->getAccess()); in MergeVarDecl()
4824 NewTemplate->setAccess(New->getAccess()); in MergeVarDecl()
4827 New->setImplicitlyInline(); in MergeVarDecl()
4830 void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) { in notePreviousDefinition() argument
4832 auto FNewDecLoc = SrcMgr.getDecomposedLoc(New); in notePreviousDefinition()
4887 bool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) { in checkVarDeclRedefinition() argument
4889 (New->getFormalLinkage() == Linkage::Internal || New->isInline() || in checkVarDeclRedefinition()
4890 isa<VarTemplateSpecializationDecl>(New) || in checkVarDeclRedefinition()
4891 New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || in checkVarDeclRedefinition()
4892 New->getDeclContext()->isDependentContext())) { in checkVarDeclRedefinition()
4895 New->demoteThisDefinitionToDeclaration(); in checkVarDeclRedefinition()
4903 Diag(New->getLocation(), diag::err_redefinition) << New; in checkVarDeclRedefinition()
4904 notePreviousDefinition(Old, New->getLocation()); in checkVarDeclRedefinition()
4905 New->setInvalidDecl(); in checkVarDeclRedefinition()
6538 NamedDecl *New; in HandleDeclarator() local
6547 New = ActOnTypedefDeclarator(S, D, DC, TInfo, Previous); in HandleDeclarator()
6549 New = ActOnFunctionDeclarator(S, D, DC, TInfo, Previous, in HandleDeclarator()
6553 New = ActOnVariableDeclarator(S, D, DC, TInfo, Previous, TemplateParamLists, in HandleDeclarator()
6557 if (!New) in HandleDeclarator()
6562 if (New->getDeclName() && AddToScope) in HandleDeclarator()
6563 PushOnScopeChains(New, S); in HandleDeclarator()
6566 checkDeclIsAllowedInOpenMPTarget(nullptr, New); in HandleDeclarator()
6568 return New; in HandleDeclarator()
11491 MultiVersionKind New) { in MultiVersionTypesCompatible() argument
11492 if (Old == New || Old == MultiVersionKind::None || in MultiVersionTypesCompatible()
11493 New == MultiVersionKind::None) in MultiVersionTypesCompatible()
11497 New == MultiVersionKind::CPUSpecific) || in MultiVersionTypesCompatible()
11499 New == MultiVersionKind::CPUDispatch); in MultiVersionTypesCompatible()
11640 [](const IdentifierInfo *Cur, const IdentifierInfo *New) { in CheckMultiVersionAdditionalDecl() argument
11641 return Cur->getName() == New->getName(); in CheckMultiVersionAdditionalDecl()
11660 [](const IdentifierInfo *Cur, const IdentifierInfo *New) { in CheckMultiVersionAdditionalDecl() argument
11661 return Cur->getName() == New->getName(); in CheckMultiVersionAdditionalDecl()
15175 ParmVarDecl *New = in ActOnParamDeclarator() local
15180 New->setInvalidDecl(); in ActOnParamDeclarator()
15182 CheckExplicitObjectParameter(*this, New, ExplicitThisLoc); in ActOnParamDeclarator()
15186 New->setScopeInfo(S->getFunctionPrototypeDepth() - 1, in ActOnParamDeclarator()
15190 S->AddDecl(New); in ActOnParamDeclarator()
15192 IdResolver.AddDecl(New); in ActOnParamDeclarator()
15194 ProcessDeclAttributes(S, New, D); in ActOnParamDeclarator()
15197 Diag(New->getLocation(), diag::err_module_private_local) in ActOnParamDeclarator()
15198 << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) in ActOnParamDeclarator()
15201 if (New->hasAttr<BlocksAttr>()) { in ActOnParamDeclarator()
15202 Diag(New->getLocation(), diag::err_block_on_nonlocal); in ActOnParamDeclarator()
15206 deduceOpenCLAddressSpace(New); in ActOnParamDeclarator()
15208 return New; in ActOnParamDeclarator()
15330 ParmVarDecl *New = ParmVarDecl::Create(Context, DC, StartLoc, NameLoc, Name, in CheckParameter() local
15337 if (New->isParameterPack()) in CheckParameter()
15339 LSI->LocalPacks.push_back(New); in CheckParameter()
15341 if (New->getType().hasNonTrivialToPrimitiveDestructCUnion() || in CheckParameter()
15342 New->getType().hasNonTrivialToPrimitiveCopyCUnion()) in CheckParameter()
15343 checkNonTrivialCUnion(New->getType(), New->getLocation(), in CheckParameter()
15355 New->setType(T); in CheckParameter()
15372 New->setInvalidDecl(); in CheckParameter()
15377 CheckPPCMMAType(New->getOriginalType(), New->getLocation())) { in CheckParameter()
15378 New->setInvalidDecl(); in CheckParameter()
15381 return New; in CheckParameter()
17335 TagDecl *New = nullptr; in ActOnTag() local
17338 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, nullptr, in ActOnTag()
17344 EnumDecl *ED = cast<EnumDecl>(New); in ActOnTag()
17355 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
17359 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) { in ActOnTag()
17374 New->setLexicalDeclContext(CurContext); in ActOnTag()
17375 return New; in ActOnTag()
17807 SkipBody->New = createTagFromNewDecl(); in ActOnTag()
17940 TagDecl *New; in ActOnTag() local
17945 New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, in ActOnTag()
17950 StdAlignValT = cast<EnumDecl>(New); in ActOnTag()
17955 if (IsFixed && cast<EnumDecl>(New)->isFixed()) { in ActOnTag()
17961 << New; in ActOnTag()
17974 EnumDecl *ED = cast<EnumDecl>(New); in ActOnTag()
17992 New = CXXRecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
17996 StdBadAlloc = cast<CXXRecordDecl>(New); in ActOnTag()
17998 New = RecordDecl::Create(Context, Kind, SearchDC, KWLoc, Loc, Name, in ActOnTag()
18003 Diag(New->getLocation(), diag::ext_type_defined_in_offsetof) in ActOnTag()
18004 << (OOK == OOK_Macro) << New->getSourceRange(); in ActOnTag()
18010 Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) in ActOnTag()
18011 << Context.getTagDeclType(New); in ActOnTag()
18017 Diag(New->getLocation(), diag::err_type_defined_in_enum) in ActOnTag()
18018 << Context.getTagDeclType(New); in ActOnTag()
18032 New->setQualifierInfo(SS.getWithLocInContext(Context)); in ActOnTag()
18034 New->setTemplateParameterListsInfo(Context, TemplateParameterLists); in ActOnTag()
18041 if (RecordDecl *RD = dyn_cast<RecordDecl>(New)) { in ActOnTag()
18059 Diag(New->getLocation(), diag::err_module_private_specialization) in ActOnTag()
18066 New->setModulePrivate(); in ActOnTag()
18071 if (isMemberSpecialization && CheckMemberSpecialization(New, Previous)) in ActOnTag()
18088 Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New); in ActOnTag()
18093 New->setInvalidDecl(); in ActOnTag()
18097 New->setLexicalDeclContext(CurContext); in ActOnTag()
18104 New->setObjectOfFriendDecl(getLangOpts().MSVCCompat); in ActOnTag()
18108 SetMemberAccessSpecifier(New, PrevDecl, AS); in ActOnTag()
18111 CheckRedeclarationInModule(New, PrevDecl); in ActOnTag()
18114 New->startDefinition(); in ActOnTag()
18116 ProcessDeclAttributeList(S, New, Attrs); in ActOnTag()
18117 AddPragmaAttributes(S, New); in ActOnTag()
18124 New->setAccess(PrevDecl->getAccess()); in ActOnTag()
18126 DeclContext *DC = New->getDeclContext()->getRedeclContext(); in ActOnTag()
18127 DC->makeDeclVisibleInContext(New); in ActOnTag()
18130 PushOnScopeChains(New, EnclosingScope, /* AddToContext = */ false); in ActOnTag()
18133 PushOnScopeChains(New, S, true); in ActOnTag()
18135 CurContext->addDecl(New); in ActOnTag()
18139 if (IdentifierInfo *II = New->getIdentifier()) in ActOnTag()
18140 if (!New->isInvalidDecl() && in ActOnTag()
18141 New->getDeclContext()->getRedeclContext()->isTranslationUnit() && in ActOnTag()
18143 Context.setFILEDecl(New); in ActOnTag()
18146 mergeDeclAttributes(New, PrevDecl); in ActOnTag()
18148 if (auto *CXXRD = dyn_cast<CXXRecordDecl>(New)) in ActOnTag()
18153 AddPushedVisibilityAttribute(New); in ActOnTag()
18155 if (isMemberSpecialization && !New->isInvalidDecl()) in ActOnTag()
18156 CompleteMemberSpecialization(New, Previous); in ActOnTag()
18162 if (New->isBeingDefined()) in ActOnTag()
18163 if (auto RD = dyn_cast<RecordDecl>(New)) in ActOnTag()
18169 return New; in ActOnTag()
18188 if (!hasStructuralCompatLayout(Prev, SkipBody.New)) in ActOnDuplicateDefinition()
19946 EnumConstantDecl *New = in ActOnEnumConstant() local
19948 if (!New) in ActOnEnumConstant()
19954 CheckShadow(New, PrevDecl, R); in ActOnEnumConstant()
19972 ProcessDeclAttributeList(S, New, Attrs); in ActOnEnumConstant()
19973 AddPragmaAttributes(S, New); in ActOnEnumConstant()
19976 New->setAccess(TheEnumDecl->getAccess()); in ActOnEnumConstant()
19977 PushOnScopeChains(New, S); in ActOnEnumConstant()
19979 ActOnDocumentableDecl(New); in ActOnEnumConstant()
19981 return New; in ActOnEnumConstant()
20407 FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext, in ActOnFileScopeAsmDecl() local
20410 CurContext->addDecl(New); in ActOnFileScopeAsmDecl()
20411 return New; in ActOnFileScopeAsmDecl()
20415 auto *New = TopLevelStmtDecl::Create(Context, Statement); in ActOnTopLevelStmtDecl() local
20416 Context.getTranslationUnitDecl()->addDecl(New); in ActOnTopLevelStmtDecl()
20417 return New; in ActOnTopLevelStmtDecl()