[clang] f807494 - [clang][Interp] Fix SourceLocExpr used in CXXDefaultInitExprs
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 8 22:29:07 PDT 2023
Author: Timm Bäder
Date: 2023-09-09T07:28:50+02:00
New Revision: f8074942c5a6f266abb1c4d1465a4d8115b22d43
URL: https://github.com/llvm/llvm-project/commit/f8074942c5a6f266abb1c4d1465a4d8115b22d43
DIFF: https://github.com/llvm/llvm-project/commit/f8074942c5a6f266abb1c4d1465a4d8115b22d43.diff
LOG: [clang][Interp] Fix SourceLocExpr used in CXXDefaultInitExprs
... when initializing.
Fixes a problem pointed out in https://reviews.llvm.org/D156045/
Added:
Modified:
clang/lib/AST/Interp/ByteCodeExprGen.cpp
clang/test/AST/Interp/builtin-functions.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index 77334268df1c14b..17cf15d8676eb86 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -2152,12 +2152,11 @@ bool ByteCodeExprGen<Emitter>::VisitCXXMemberCallExpr(
template <class Emitter>
bool ByteCodeExprGen<Emitter>::VisitCXXDefaultInitExpr(
const CXXDefaultInitExpr *E) {
-
+ SourceLocScope<Emitter> SLS(this, E);
if (Initializing)
return this->visitInitializer(E->getExpr());
assert(classify(E->getType()));
- SourceLocScope<Emitter> SLS(this, E);
return this->visit(E->getExpr());
}
diff --git a/clang/test/AST/Interp/builtin-functions.cpp b/clang/test/AST/Interp/builtin-functions.cpp
index 52ecee536938f3f..cd4ad010af12220 100644
--- a/clang/test/AST/Interp/builtin-functions.cpp
+++ b/clang/test/AST/Interp/builtin-functions.cpp
@@ -248,4 +248,15 @@ namespace SourceLocation {
};
static_assert(Foo{}.a == __LINE__, "");
+
+ struct AA {
+ int n = __builtin_LINE();
+ };
+ struct B {
+ AA a = {};
+ };
+ constexpr void f() {
+ constexpr B c = {};
+ static_assert(c.a.n == __LINE__ - 1, "");
+ }
}
More information about the cfe-commits
mailing list