[clang] [Clang] Rewrite SourceLocExpr in default args (PR #93383)
https://github.com/cor3ntin closed https://github.com/llvm/llvm-project/pull/93383 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] Rewrite SourceLocExpr in default args (PR #93383)
https://github.com/cor3ntin updated https://github.com/llvm/llvm-project/pull/93383 >From ce5f58180635968c1525b9a3d267f91c495f3058 Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Sat, 25 May 2024 20:49:22 +0200 Subject: [PATCH 1/2] [Clang] Rewrite SourceLocExpr in default args In order for their dependency to be computed correctly, SourceLocExpr should refer to the context in which they are used. Fixes #92680 --- clang/docs/ReleaseNotes.rst| 2 ++ clang/lib/Sema/SemaExpr.cpp| 9 + clang/test/SemaCXX/source_location.cpp | 17 + 3 files changed, 28 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 7bcdee96e213e..3f2c3c1e5a65d 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -771,6 +771,8 @@ Bug Fixes to C++ Support Fixes (#GH87210), (GH89541). - Clang no longer tries to check if an expression is immediate-escalating in an unevaluated context. Fixes (#GH91308). +- Fix a crash caused by a regression in the handling of ``source_location`` + in dependent contexts. Fixes (#GH92680). Bug Fixes to AST Handling ^ diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ff9c5ead36dcf..ef3162ca989c4 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -5506,6 +5506,15 @@ struct EnsureImmediateInvocationInDefaultArgs // cause it to incorrectly point it to the outermost class // in the case of nested struct initialization. ExprResult TransformCXXThisExpr(CXXThisExpr *E) { return E; } + + // Rewrite to source location to refer to the context in which they are used + ExprResult TransformSourceLocExpr(SourceLocExpr *E) { +if (E->getParentContext() == SemaRef.CurContext) + return E; +return getDerived().RebuildSourceLocExpr(E->getIdentKind(), E->getType(), + E->getBeginLoc(), E->getEndLoc(), + SemaRef.CurContext); + } }; ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, diff --git a/clang/test/SemaCXX/source_location.cpp b/clang/test/SemaCXX/source_location.cpp index 63157cfacdd98..6b3610d703e71 100644 --- a/clang/test/SemaCXX/source_location.cpp +++ b/clang/test/SemaCXX/source_location.cpp @@ -912,3 +912,20 @@ auto g() { } } + +namespace GH92680 { + +struct IntConstuctible { + IntConstuctible(std::source_location = std::source_location::current()); +}; + +template +auto construct_at(IntConstuctible) -> decltype(IntConstuctible()) { + return {}; +} + +void test() { + construct_at({}); +} + +} >From ec59077109616b62a1421aab034caa6cb6148fe4 Mon Sep 17 00:00:00 2001 From: cor3ntin Date: Sun, 26 May 2024 09:18:00 +0200 Subject: [PATCH 2/2] Update clang/lib/Sema/SemaExpr.cpp Co-authored-by: Timm Baeder --- clang/lib/Sema/SemaExpr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ef3162ca989c4..410f80ae864a1 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -5507,7 +5507,7 @@ struct EnsureImmediateInvocationInDefaultArgs // in the case of nested struct initialization. ExprResult TransformCXXThisExpr(CXXThisExpr *E) { return E; } - // Rewrite to source location to refer to the context in which they are used + // Rewrite to source location to refer to the context in which they are used. ExprResult TransformSourceLocExpr(SourceLocExpr *E) { if (E->getParentContext() == SemaRef.CurContext) return E; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] Rewrite SourceLocExpr in default args (PR #93383)
@@ -5506,6 +5506,15 @@ struct EnsureImmediateInvocationInDefaultArgs // cause it to incorrectly point it to the outermost class // in the case of nested struct initialization. ExprResult TransformCXXThisExpr(CXXThisExpr *E) { return E; } + + // Rewrite to source location to refer to the context in which they are used tbaederr wrote: ```suggestion // Rewrite to source location to refer to the context in which they are used. ``` https://github.com/llvm/llvm-project/pull/93383 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] Rewrite SourceLocExpr in default args (PR #93383)
https://github.com/EricWF approved this pull request. LGTM. Thanks for the fix. https://github.com/llvm/llvm-project/pull/93383 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] Rewrite SourceLocExpr in default args (PR #93383)
llvmbot wrote: @llvm/pr-subscribers-clang Author: cor3ntin (cor3ntin) Changes In order for their dependency to be computed correctly, SourceLocExpr should refer to the context in which they are used. Fixes #92680 --- Full diff: https://github.com/llvm/llvm-project/pull/93383.diff 3 Files Affected: - (modified) clang/docs/ReleaseNotes.rst (+2) - (modified) clang/lib/Sema/SemaExpr.cpp (+9) - (modified) clang/test/SemaCXX/source_location.cpp (+17) ``diff diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 7bcdee96e213e..3f2c3c1e5a65d 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -771,6 +771,8 @@ Bug Fixes to C++ Support Fixes (#GH87210), (GH89541). - Clang no longer tries to check if an expression is immediate-escalating in an unevaluated context. Fixes (#GH91308). +- Fix a crash caused by a regression in the handling of ``source_location`` + in dependent contexts. Fixes (#GH92680). Bug Fixes to AST Handling ^ diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ff9c5ead36dcf..ef3162ca989c4 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -5506,6 +5506,15 @@ struct EnsureImmediateInvocationInDefaultArgs // cause it to incorrectly point it to the outermost class // in the case of nested struct initialization. ExprResult TransformCXXThisExpr(CXXThisExpr *E) { return E; } + + // Rewrite to source location to refer to the context in which they are used + ExprResult TransformSourceLocExpr(SourceLocExpr *E) { +if (E->getParentContext() == SemaRef.CurContext) + return E; +return getDerived().RebuildSourceLocExpr(E->getIdentKind(), E->getType(), + E->getBeginLoc(), E->getEndLoc(), + SemaRef.CurContext); + } }; ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, diff --git a/clang/test/SemaCXX/source_location.cpp b/clang/test/SemaCXX/source_location.cpp index 63157cfacdd98..6b3610d703e71 100644 --- a/clang/test/SemaCXX/source_location.cpp +++ b/clang/test/SemaCXX/source_location.cpp @@ -912,3 +912,20 @@ auto g() { } } + +namespace GH92680 { + +struct IntConstuctible { + IntConstuctible(std::source_location = std::source_location::current()); +}; + +template +auto construct_at(IntConstuctible) -> decltype(IntConstuctible()) { + return {}; +} + +void test() { + construct_at({}); +} + +} `` https://github.com/llvm/llvm-project/pull/93383 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Clang] Rewrite SourceLocExpr in default args (PR #93383)
https://github.com/cor3ntin created https://github.com/llvm/llvm-project/pull/93383 In order for their dependency to be computed correctly, SourceLocExpr should refer to the context in which they are used. Fixes #92680 >From ce5f58180635968c1525b9a3d267f91c495f3058 Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Sat, 25 May 2024 20:49:22 +0200 Subject: [PATCH] [Clang] Rewrite SourceLocExpr in default args In order for their dependency to be computed correctly, SourceLocExpr should refer to the context in which they are used. Fixes #92680 --- clang/docs/ReleaseNotes.rst| 2 ++ clang/lib/Sema/SemaExpr.cpp| 9 + clang/test/SemaCXX/source_location.cpp | 17 + 3 files changed, 28 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 7bcdee96e213e..3f2c3c1e5a65d 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -771,6 +771,8 @@ Bug Fixes to C++ Support Fixes (#GH87210), (GH89541). - Clang no longer tries to check if an expression is immediate-escalating in an unevaluated context. Fixes (#GH91308). +- Fix a crash caused by a regression in the handling of ``source_location`` + in dependent contexts. Fixes (#GH92680). Bug Fixes to AST Handling ^ diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ff9c5ead36dcf..ef3162ca989c4 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -5506,6 +5506,15 @@ struct EnsureImmediateInvocationInDefaultArgs // cause it to incorrectly point it to the outermost class // in the case of nested struct initialization. ExprResult TransformCXXThisExpr(CXXThisExpr *E) { return E; } + + // Rewrite to source location to refer to the context in which they are used + ExprResult TransformSourceLocExpr(SourceLocExpr *E) { +if (E->getParentContext() == SemaRef.CurContext) + return E; +return getDerived().RebuildSourceLocExpr(E->getIdentKind(), E->getType(), + E->getBeginLoc(), E->getEndLoc(), + SemaRef.CurContext); + } }; ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, diff --git a/clang/test/SemaCXX/source_location.cpp b/clang/test/SemaCXX/source_location.cpp index 63157cfacdd98..6b3610d703e71 100644 --- a/clang/test/SemaCXX/source_location.cpp +++ b/clang/test/SemaCXX/source_location.cpp @@ -912,3 +912,20 @@ auto g() { } } + +namespace GH92680 { + +struct IntConstuctible { + IntConstuctible(std::source_location = std::source_location::current()); +}; + +template +auto construct_at(IntConstuctible) -> decltype(IntConstuctible()) { + return {}; +} + +void test() { + construct_at({}); +} + +} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits