return true;
}
- if (std::distance(NewFD->attr_begin(), NewFD->attr_end()) != 1) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_no_other_attrs);
- return true;
- }
-
- if (NewFD->getTemplatedKind() == FunctionDecl::TK_FunctionTemplate) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
- << FuncTemplates;
- return true;
- }
+ if (std::distance(NewFD->attr_begin(), NewFD->attr_end()) != 1)
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_no_other_attrs);
+ if (NewFD->getTemplatedKind() == FunctionDecl::TK_FunctionTemplate)
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
+ << FuncTemplates;
if (const auto *NewCXXFD = dyn_cast<CXXMethodDecl>(NewFD)) {
- if (NewCXXFD->isVirtual()) {
- S.Diag(NewCXXFD->getLocation(), diag::err_multiversion_doesnt_support)
- << VirtFuncs;
- return true;
- }
+ if (NewCXXFD->isVirtual())
+ return S.Diag(NewCXXFD->getLocation(),
+ diag::err_multiversion_doesnt_support)
+ << VirtFuncs;
- if (const auto *NewCXXCtor = dyn_cast<CXXConstructorDecl>(NewFD)) {
- S.Diag(NewCXXCtor->getLocation(), diag::err_multiversion_doesnt_support)
- << Constructors;
- return true;
- }
+ if (const auto *NewCXXCtor = dyn_cast<CXXConstructorDecl>(NewFD))
+ return S.Diag(NewCXXCtor->getLocation(),
+ diag::err_multiversion_doesnt_support)
+ << Constructors;
- if (const auto *NewCXXDtor = dyn_cast<CXXDestructorDecl>(NewFD)) {
- S.Diag(NewCXXDtor->getLocation(), diag::err_multiversion_doesnt_support)
- << Destructors;
- return true;
- }
+ if (const auto *NewCXXDtor = dyn_cast<CXXDestructorDecl>(NewFD))
+ return S.Diag(NewCXXDtor->getLocation(),
+ diag::err_multiversion_doesnt_support)
+ << Destructors;
}
- if (NewFD->isDeleted()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
- << DeletedFuncs;
- }
- if (NewFD->isDefaulted()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
- << DefaultedFuncs;
- }
+ if (NewFD->isDeleted())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
+ << DeletedFuncs;
+
+ if (NewFD->isDefaulted())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
+ << DefaultedFuncs;
QualType NewQType = S.getASTContext().getCanonicalType(NewFD->getType());
const auto *NewType = cast<FunctionType>(NewQType);
QualType NewReturnType = NewType->getReturnType();
- if (NewReturnType->isUndeducedType()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
- << DeducedReturn;
- return true;
- }
+ if (NewReturnType->isUndeducedType())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_doesnt_support)
+ << DeducedReturn;
// Only allow transition to MultiVersion if it hasn't been used.
- if (OldFD && CausesMV && OldFD->isUsed(false)) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);
- return true;
- }
+ if (OldFD && CausesMV && OldFD->isUsed(false))
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);
// Ensure the return type is identical.
if (OldFD) {
FunctionType::ExtInfo OldTypeInfo = OldType->getExtInfo();
FunctionType::ExtInfo NewTypeInfo = NewType->getExtInfo();
- if (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_diff) << CallingConv;
- return true;
- }
+ if (OldTypeInfo.getCC() != NewTypeInfo.getCC())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_diff)
+ << CallingConv;
QualType OldReturnType = OldType->getReturnType();
- if (OldReturnType != NewReturnType) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_diff) << ReturnType;
- return true;
- }
+ if (OldReturnType != NewReturnType)
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_diff)
+ << ReturnType;
- if (OldFD->isConstexpr() != NewFD->isConstexpr()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_diff)
- << ConstexprSpec;
- return true;
- }
+ if (OldFD->isConstexpr() != NewFD->isConstexpr())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_diff)
+ << ConstexprSpec;
- if (OldFD->isInlineSpecified() != NewFD->isInlineSpecified()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_diff) << InlineSpec;
- return true;
- }
+ if (OldFD->isInlineSpecified() != NewFD->isInlineSpecified())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_diff)
+ << InlineSpec;
- if (OldFD->getStorageClass() != NewFD->getStorageClass()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_diff) << StorageClass;
- return true;
- }
+ if (OldFD->getStorageClass() != NewFD->getStorageClass())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_diff)
+ << StorageClass;
- if (OldFD->isExternC() != NewFD->isExternC()) {
- S.Diag(NewFD->getLocation(), diag::err_multiversion_diff) << Linkage;
- return true;
- }
+ if (OldFD->isExternC() != NewFD->isExternC())
+ return S.Diag(NewFD->getLocation(), diag::err_multiversion_diff)
+ << Linkage;
if (S.CheckEquivalentExceptionSpec(
OldFD->getType()->getAs<FunctionProtoType>(), OldFD->getLocation(),