Give this diagnostic a diagnostic group (#136182)

I put this under -Wunitialized because that's the same group it's under
in GCC.

Fixes #41104
This commit is contained in:
Aaron Ballman
2025-04-18 07:09:27 -04:00
committed by GitHub
parent c5d59723cb
commit c609cd2df9
4 changed files with 20 additions and 3 deletions

View File

@@ -391,6 +391,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
----------------------------------

View File

@@ -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<

View File

@@ -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

View File

@@ -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}}
};