================ @@ -11792,6 +11792,32 @@ static bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, OldDecl, Previous); } +static void CheckFunctionDeclarationAttributesUsage(Sema &S, + FunctionDecl *NewFD) { + const bool is_pure = NewFD->hasAttr<PureAttr>(); + const bool is_const = NewFD->hasAttr<ConstAttr>(); + + if (is_pure && is_const) { + S.Diag(NewFD->getLocation(), diag::warn_const_attr_with_pure_attr); + NewFD->dropAttr<PureAttr>(); + } + if (is_pure || is_const) { + if (isa<CXXConstructorDecl>(NewFD)) { ---------------- AaronBallman wrote:
> My point is that semantically a constructor has a return value, the user can > think of a constructor as a function that returns a value. And in the future > we may change the behavior so that marking the constructor 'pure' will make > sense. I don't know if it's common for people to think of a constructor as a function that returns a value, but I can squint and see that line of thinking. CC @erichkeane for more opinions. > This leads to just ignoring 'pure'/'const' on constructors without warning > now to make possible change it in future (but gcc thinks it is UB) I think we can change it in the future either way, this is about diagnostic wording. https://github.com/llvm/llvm-project/pull/78200 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits