[clang] [clang][Interp] Point 'declared here' note of invalid fns to definition (PR #102031)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 5 11:16:20 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/102031.diff
2 Files Affected:
- (modified) clang/lib/AST/Interp/Interp.cpp (+6-1)
- (modified) clang/test/AST/Interp/cxx20.cpp (+17)
``````````diff
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}}
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/102031
More information about the cfe-commits
mailing list