Skip to content

Commit be3a8b8

Browse files
authored
[clang] Add C++26 diagnostics to compatibility diagnosic groups (#97806)
This patch adds `CXXPre26Compat` and `CXXPre26CompatPedantic` groups (which are concerned with new features not available in older language modes) to `CXX98Compat`, etc. This way, if user has `-Wc++20-compat` and they use pack indexing, they will be warned. Ideally this should have been done when C++26 groups were created, but we shipped two releases of Clang since then.
1 parent f90bac9 commit be3a8b8

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,11 @@ New Compiler Flags
439439
Matches MSVC behaviour by defining ``__STDC__`` to ``1`` when
440440
MSVC compatibility mode is used. It has no effect for C++ code.
441441

442+
- ``-Wc++23-compat`` group was added to help migrating existing codebases
443+
to C++23.
444+
442445
- ``-Wc++2c-compat`` group was added to help migrating existing codebases
443-
to C++26.
446+
to upcoming C++26.
444447

445448
Deprecated Compiler Flags
446449
-------------------------
@@ -480,6 +483,10 @@ Modified Compiler Flags
480483
evaluating to ``true`` and an empty body such as ``while(1);``)
481484
are considered infinite, even when the ``-ffinite-loop`` flag is set.
482485

486+
- Diagnostics groups about compatibility with a particular C++ Standard version
487+
now include dianostics about C++26 features that are not present in older
488+
versions.
489+
483490
Removed Compiler Flags
484491
-------------------------
485492

clang/include/clang/Basic/DiagnosticGroups.td

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,8 @@ def CXX98Compat : DiagGroup<"c++98-compat",
344344
CXXPre14Compat,
345345
CXXPre17Compat,
346346
CXXPre20Compat,
347-
CXXPre23Compat]>;
347+
CXXPre23Compat,
348+
CXXPre26Compat]>;
348349
// Warnings for C++11 features which are Extensions in C++98 mode.
349350
def CXX98CompatPedantic : DiagGroup<"c++98-compat-pedantic",
350351
[CXX98Compat,
@@ -353,7 +354,8 @@ def CXX98CompatPedantic : DiagGroup<"c++98-compat-pedantic",
353354
CXXPre14CompatPedantic,
354355
CXXPre17CompatPedantic,
355356
CXXPre20CompatPedantic,
356-
CXXPre23CompatPedantic]>;
357+
CXXPre23CompatPedantic,
358+
CXXPre26CompatPedantic]>;
357359

358360
def CXX11NarrowingConstReference : DiagGroup<"c++11-narrowing-const-reference">;
359361
def CXX11Narrowing : DiagGroup<"c++11-narrowing", [CXX11NarrowingConstReference]>;
@@ -384,42 +386,52 @@ def CXX11Compat : DiagGroup<"c++11-compat",
384386
CXXPre14Compat,
385387
CXXPre17Compat,
386388
CXXPre20Compat,
387-
CXXPre23Compat]>;
389+
CXXPre23Compat,
390+
CXXPre26Compat]>;
388391
def : DiagGroup<"c++0x-compat", [CXX11Compat]>;
389392
def CXX11CompatPedantic : DiagGroup<"c++11-compat-pedantic",
390393
[CXX11Compat,
391394
CXXPre14CompatPedantic,
392395
CXXPre17CompatPedantic,
393396
CXXPre20CompatPedantic,
394-
CXXPre23CompatPedantic]>;
397+
CXXPre23CompatPedantic,
398+
CXXPre26CompatPedantic]>;
395399

396400
def CXX14Compat : DiagGroup<"c++14-compat", [CXXPre17Compat,
397401
CXXPre20Compat,
398-
CXXPre23Compat]>;
402+
CXXPre23Compat,
403+
CXXPre26Compat]>;
399404
def CXX14CompatPedantic : DiagGroup<"c++14-compat-pedantic",
400405
[CXX14Compat,
401406
CXXPre17CompatPedantic,
402407
CXXPre20CompatPedantic,
403-
CXXPre23CompatPedantic]>;
408+
CXXPre23CompatPedantic,
409+
CXXPre26CompatPedantic]>;
404410

405411
def CXX17Compat : DiagGroup<"c++17-compat", [DeprecatedRegister,
406412
DeprecatedIncrementBool,
407413
CXX17CompatMangling,
408414
CXXPre20Compat,
409-
CXXPre23Compat]>;
415+
CXXPre23Compat,
416+
CXXPre26Compat]>;
410417
def CXX17CompatPedantic : DiagGroup<"c++17-compat-pedantic",
411418
[CXX17Compat,
412419
CXXPre20CompatPedantic,
413-
CXXPre23CompatPedantic]>;
420+
CXXPre23CompatPedantic,
421+
CXXPre26CompatPedantic]>;
414422
def : DiagGroup<"c++1z-compat", [CXX17Compat]>;
415423

416-
def CXX20Compat : DiagGroup<"c++20-compat", [CXXPre23Compat]>;
424+
def CXX20Compat : DiagGroup<"c++20-compat", [CXXPre23Compat,
425+
CXXPre26Compat]>;
417426
def CXX20CompatPedantic : DiagGroup<"c++20-compat-pedantic",
418427
[CXX20Compat,
419-
CXXPre23CompatPedantic]>;
428+
CXXPre23CompatPedantic,
429+
CXXPre26CompatPedantic]>;
420430
def : DiagGroup<"c++2a-compat", [CXX20Compat]>;
421431
def : DiagGroup<"c++2a-compat-pedantic", [CXX20CompatPedantic]>;
422432

433+
def CXX23Compat : DiagGroup<"c++23-compat", [CXXPre26Compat]>;
434+
423435
def CXX26Compat : DiagGroup<"c++2c-compat", [DeleteIncomplete]>;
424436

425437
def ExitTimeDestructors : DiagGroup<"exit-time-destructors">;

0 commit comments

Comments
 (0)