Author: Timm Baeder Date: 2024-08-06T06:11:06+02:00 New Revision: 421c3fe54b56608bc6b23716d1cac96c8b3c38c5
URL: https://github.com/llvm/llvm-project/commit/421c3fe54b56608bc6b23716d1cac96c8b3c38c5 DIFF: https://github.com/llvm/llvm-project/commit/421c3fe54b56608bc6b23716d1cac96c8b3c38c5.diff LOG: [clang][Interp] Point 'declared here' note of invalid fns to definition (#102031) Added: Modified: clang/lib/AST/Interp/Interp.cpp clang/test/AST/Interp/cxx20.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Interp.cpp b/clang/lib/AST/Interp/Interp.cpp index 0252dd0d32699..0f72b860ddad7 100644 --- a/clang/lib/AST/Interp/Interp.cpp +++ b/clang/lib/AST/Interp/Interp.cpp @@ -628,7 +628,12 @@ bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) { S.FFDiag(Loc, diag::note_constexpr_invalid_function, 1) << DiagDecl->isConstexpr() << (bool)CD << DiagDecl; - S.Note(DiagDecl->getLocation(), diag::note_declared_at); + + if (DiagDecl->getDefinition()) + S.Note(DiagDecl->getDefinition()->getLocation(), + diag::note_declared_at); + else + S.Note(DiagDecl->getLocation(), diag::note_declared_at); } } else { S.FFDiag(Loc, diag::note_invalid_subexpr_in_const_expr); diff --git a/clang/test/AST/Interp/cxx20.cpp b/clang/test/AST/Interp/cxx20.cpp index da80454b7a820..27dbd2818be60 100644 --- a/clang/test/AST/Interp/cxx20.cpp +++ b/clang/test/AST/Interp/cxx20.cpp @@ -841,3 +841,20 @@ namespace VariadicCallOperator { } constexpr int A = foo(); } + +namespace DefinitionLoc { + + struct NonConstexprCopy { + constexpr NonConstexprCopy() = default; + NonConstexprCopy(const NonConstexprCopy &); + constexpr NonConstexprCopy(NonConstexprCopy &&) = default; + + int n = 42; + }; + + NonConstexprCopy::NonConstexprCopy(const NonConstexprCopy &) = default; // both-note {{here}} + + constexpr NonConstexprCopy ncc1 = NonConstexprCopy(NonConstexprCopy()); + constexpr NonConstexprCopy ncc2 = ncc1; // both-error {{constant expression}} \ + // both-note {{non-constexpr constructor}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits