https://github.com/shafik created https://github.com/llvm/llvm-project/pull/80327
We should diagnose a const qualified member operator new but we fail to do so and this leads to crash during debug info generation. The fix is to diagnose this as ill-formed in the front-end. Fixes: https://github.com/llvm/llvm-project/issues/79748 >From 571ca73f055aa385d6a93ab6343f95492ab0f073 Mon Sep 17 00:00:00 2001 From: Shafik Yaghmour <shafik.yaghm...@intel.com> Date: Thu, 1 Feb 2024 11:19:14 -0800 Subject: [PATCH] [Clang][Sema] Fix crash with const qualified member operator new We should diagnose a const qualified member operator new but we fail to do so and this leads to crash during debug info generation. The fix is to diagnose this as ill-formed in the front-end. Fixes: https://github.com/llvm/llvm-project/issues/79748 --- clang/lib/Sema/SemaType.cpp | 6 ++++-- clang/test/SemaCXX/function-type-qual.cpp | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 7cee73d5d6bae..2d9e3b2f73909 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -5914,8 +5914,10 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, // // ... for instance. if (IsQualifiedFunction && - !(Kind == Member && !D.isExplicitObjectMemberFunction() && - D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static) && + (Kind != Member || D.isExplicitObjectMemberFunction() || + D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static || + (D.getContext() == clang::DeclaratorContext::Member && + D.isStaticMember())) && !IsTypedefName && D.getContext() != DeclaratorContext::TemplateArg && D.getContext() != DeclaratorContext::TemplateTypeArg) { SourceLocation Loc = D.getBeginLoc(); diff --git a/clang/test/SemaCXX/function-type-qual.cpp b/clang/test/SemaCXX/function-type-qual.cpp index bb25c17e83bdf..fc9fc20c14248 100644 --- a/clang/test/SemaCXX/function-type-qual.cpp +++ b/clang/test/SemaCXX/function-type-qual.cpp @@ -37,3 +37,9 @@ void instantiateArrayDecay() { int a[1]; arrayDecay(a); } + +namespace GH79748 { +struct A { + void* operator new(unsigned long bytes) const; //expected-error {{static member function cannot have 'const' qualifier}} +}; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits