https://github.com/AaronBallman created https://github.com/llvm/llvm-project/pull/136182
I put this under -Wunitialized because that's the same group it's under in GCC. Fixes #41104 >From a195528d6db796b8925be3d43802ced6d931a9a2 Mon Sep 17 00:00:00 2001 From: Aaron Ballman <aa...@aaronballman.com> Date: Thu, 17 Apr 2025 14:58:23 -0400 Subject: [PATCH] Give this diagnostic a diagnostic group I put this under -Wunitialized because that's the same group it's under in GCC. Fixes #41104 --- clang/docs/ReleaseNotes.rst | 4 ++++ clang/include/clang/Basic/DiagnosticSemaKinds.td | 3 ++- clang/test/Misc/warning-flags.c | 3 +-- clang/test/SemaCXX/uninitialized-no-ctor.cpp | 13 +++++++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 clang/test/SemaCXX/uninitialized-no-ctor.cpp diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index c75d83a6d1a7a..21f6aba8498b7 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -385,6 +385,10 @@ Improvements to Clang's diagnostics Fixes #GH131127 +- ``-Wuninitialized`` now diagnoses when a class does not declare any + constructors to initialize their non-modifiable members. The diagnostic is + not new; being controlled via a warning group is what's new. Fixes #GH41104 + Improvements to Clang's time-trace ---------------------------------- diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 6cbe8b60fe9bf..c29a3422acd26 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -2266,7 +2266,8 @@ def err_constructor_byvalue_arg : Error< "copy constructor must pass its first argument by reference">; def warn_no_constructor_for_refconst : Warning< "%select{struct|interface|union|class|enum}0 %1 does not declare any " - "constructor to initialize its non-modifiable members">; + "constructor to initialize its non-modifiable members">, + InGroup<Uninitialized>; def note_refconst_member_not_initialized : Note< "%select{const|reference}0 member %1 will never be initialized">; def ext_ms_explicit_constructor_call : ExtWarn< diff --git a/clang/test/Misc/warning-flags.c b/clang/test/Misc/warning-flags.c index 7ac77cc91fdc1..3dc4bb55aa69c 100644 --- a/clang/test/Misc/warning-flags.c +++ b/clang/test/Misc/warning-flags.c @@ -18,7 +18,7 @@ This test serves two purposes: The list of warnings below should NEVER grow. It should gradually shrink to 0. -CHECK: Warnings without flags (57): +CHECK: Warnings without flags (56): CHECK-NEXT: ext_expected_semi_decl_list CHECK-NEXT: ext_missing_whitespace_after_macro_name @@ -57,7 +57,6 @@ CHECK-NEXT: warn_method_param_redefinition CHECK-NEXT: warn_missing_case_for_condition CHECK-NEXT: warn_missing_dependent_template_keyword CHECK-NEXT: warn_missing_whitespace_after_macro_name -CHECK-NEXT: warn_no_constructor_for_refconst CHECK-NEXT: warn_not_compound_assign CHECK-NEXT: warn_objc_property_copy_missing_on_block CHECK-NEXT: warn_objc_protocol_qualifier_missing_id diff --git a/clang/test/SemaCXX/uninitialized-no-ctor.cpp b/clang/test/SemaCXX/uninitialized-no-ctor.cpp new file mode 100644 index 0000000000000..7a08f2f3dc37e --- /dev/null +++ b/clang/test/SemaCXX/uninitialized-no-ctor.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wno-uninitialized -verify=good %s +//good-no-diagnostics + +template <class T> +class RefMem { // expected-warning {{class 'RefMem<int &>' does not declare any constructor to initialize its non-modifiable members}} + T &M; // expected-note {{reference member 'M' will never be initialized}} +}; + +struct RefRef { + RefMem<int &> R; // expected-note {{in instantiation of template class 'RefMem<int &>' requested here}} +}; + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits