https://github.com/pascalj created 
https://github.com/llvm/llvm-project/pull/93827

Add an option to ignore warnings for cppcoreguidelines 
avoid-non-const-global-variables.

Understandably, the core guidelines discourage non const global variables, even 
at the TU level (see https://github.com/isocpp/CppCoreGuidelines/issues/2195). 
However, having a small TU with an interface that uses a non const variable 
from an anonymous namespace can be a valid choice.

This adds an option that disables the warning just for anonymous namespaces, 
i.e. at the file level. The default is still to show a warning, just as before.

>From 89265bfcca48a879f281b9ef8eb6e0730794f985 Mon Sep 17 00:00:00 2001
From: Pascal Jungblut <m...@pascalj.de>
Date: Thu, 30 May 2024 14:28:50 +0200
Subject: [PATCH] Add option to ignore anonymous namespaces in
 avoid-non-const-global-variables

---
 .../AvoidNonConstGlobalVariablesCheck.cpp     |   6 +-
 .../avoid-non-const-global-variables.rst      |  22 +++
 .../avoid-non-const-global-variables.cpp      | 137 ++++++++++++------
 3 files changed, 118 insertions(+), 47 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/cppcoreguidelines/AvoidNonConstGlobalVariablesCheck.cpp
 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/AvoidNonConstGlobalVariablesCheck.cpp
index ee17b0e014288..b536016a3cccd 100644
--- 
a/clang-tools-extra/clang-tidy/cppcoreguidelines/AvoidNonConstGlobalVariablesCheck.cpp
+++ 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/AvoidNonConstGlobalVariablesCheck.cpp
@@ -7,7 +7,6 @@
 
//===----------------------------------------------------------------------===//
 
 #include "AvoidNonConstGlobalVariablesCheck.h"
-#include "clang/AST/ASTContext.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
 #include "clang/ASTMatchers/ASTMatchers.h"
 
@@ -16,9 +15,12 @@ using namespace clang::ast_matchers;
 namespace clang::tidy::cppcoreguidelines {
 
 void AvoidNonConstGlobalVariablesCheck::registerMatchers(MatchFinder *Finder) {
+  auto NamespaceMatcher = Options.get("AllowAnonymousNamespace", false)
+                              ? namespaceDecl(unless(isAnonymous()))
+                              : namespaceDecl();
   auto GlobalContext =
       varDecl(hasGlobalStorage(),
-              hasDeclContext(anyOf(namespaceDecl(), translationUnitDecl())));
+              hasDeclContext(anyOf(NamespaceMatcher, translationUnitDecl())));
 
   auto GlobalVariable = varDecl(
       GlobalContext,
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/avoid-non-const-global-variables.rst
 
b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/avoid-non-const-global-variables.rst
index 21c20af6e8107..e2350872c6ece 100644
--- 
a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/avoid-non-const-global-variables.rst
+++ 
b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/avoid-non-const-global-variables.rst
@@ -41,3 +41,25 @@ The variables ``a``, ``c``, ``c_ptr1``, ``c_const_ptr`` and 
``c_reference``
 will all generate warnings since they are either a non-const globally 
accessible
 variable, a pointer or a reference providing global access to non-const data
 or both.
+
+Options
+-------
+
+.. option:: AllowAnonymousNamespace
+
+   When set to `true` (default is `false`), non-const variables in anonymous 
namespaces will not generate a warning.
+
+Example
+^^^^^^^
+
+.. code-block:: c++
+
+   namespace {
+     int counter = 0;
+   }
+
+   int Increment() {
+    return ++counter;
+   }
+
+will not generate a warning for `counter` if :option:`AllowAnonymousNamespace` 
is set to `true`.
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/avoid-non-const-global-variables.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/avoid-non-const-global-variables.cpp
index 3ca1029433d22..8956dd414356e 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/avoid-non-const-global-variables.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/avoid-non-const-global-variables.cpp
@@ -1,21 +1,30 @@
-// RUN: %check_clang_tidy %s 
cppcoreguidelines-avoid-non-const-global-variables %t
+// RUN: %check_clang_tidy %s -check-suffix=DEFAULT 
cppcoreguidelines-avoid-non-const-global-variables %t
+// RUN: %check_clang_tidy %s -check-suffix=NAMESPACE 
cppcoreguidelines-avoid-non-const-global-variables %t -- \
+// RUN: -config="{CheckOptions: 
{cppcoreguidelines-avoid-non-const-global-variables.AllowAnonymousNamespace : 
'true'}}"
+
 
 int nonConstInt = 0;
-// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: variable 'nonConstInt' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:5: warning: variable 'nonConstInt' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:5: warning: variable 'nonConstInt' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 int &nonConstIntReference = nonConstInt;
-// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: variable 'nonConstIntReference' 
provides global access to a non-const object; consider making the referenced 
data 'const' [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:6: warning: variable 
'nonConstIntReference' provides global access to a non-const object; consider 
making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:6: warning: variable 
'nonConstIntReference' provides global access to a non-const object; consider 
making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 int *pointerToNonConstInt = &nonConstInt;
-// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: variable 'pointerToNonConstInt' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
-// CHECK-MESSAGES: :[[@LINE-2]]:6: warning: variable 'pointerToNonConstInt' 
provides global access to a non-const object; consider making the pointed-to 
data 'const' [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:6: warning: variable 
'pointerToNonConstInt' is non-const and globally accessible, consider making it 
const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:6: warning: variable 
'pointerToNonConstInt' is non-const and globally accessible, consider making it 
const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-3]]:6: warning: variable 
'pointerToNonConstInt' provides global access to a non-const object; consider 
making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-4]]:6: warning: variable 
'pointerToNonConstInt' provides global access to a non-const object; consider 
making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 int *const constPointerToNonConstInt = &nonConstInt;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 
'constPointerToNonConstInt' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'constPointerToNonConstInt' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'constPointerToNonConstInt' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 namespace namespace_name {
 int nonConstNamespaceInt = 0;
-// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: variable 'nonConstNamespaceInt' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:5: warning: variable 
'nonConstNamespaceInt' is non-const and globally accessible, consider making it 
const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:5: warning: variable 
'nonConstNamespaceInt' is non-const and globally accessible, consider making it 
const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const int constNamespaceInt = 0;
 } // namespace namespace_name
@@ -23,7 +32,8 @@ const int constNamespaceInt = 0;
 const int constInt = 0;
 
 const int *pointerToConstInt = &constInt;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'pointerToConstInt' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'pointerToConstInt' is non-const and globally accessible, consider making it 
const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'pointerToConstInt' is non-const and globally accessible, consider making it 
const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const int *const constPointerToConstInt = &constInt;
 
@@ -38,7 +48,8 @@ int function() {
 
 namespace {
 int nonConstAnonymousNamespaceInt = 0;
-// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: variable 
'nonConstAnonymousNamespaceInt' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:5: warning: variable 
'nonConstAnonymousNamespaceInt' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE-NOT: :[[@LINE-2]]:5: warning: variable 
'nonConstAnonymousNamespaceInt' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
 } // namespace
 
 class DummyClass {
@@ -52,28 +63,37 @@ class DummyClass {
 };
 
 DummyClass nonConstClassInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'nonConstClassInstance' 
is non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'nonConstClassInstance' is non-const and globally accessible, consider making 
it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'nonConstClassInstance' is non-const and globally accessible, consider making 
it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyClass *pointerToNonConstDummyClass = &nonConstClassInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 
'pointerToNonConstDummyClass' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: variable 
'pointerToNonConstDummyClass' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:13: warning: variable 
'pointerToNonConstDummyClass' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:13: warning: variable 
'pointerToNonConstDummyClass' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-3]]:13: warning: variable 
'pointerToNonConstDummyClass' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-4]]:13: warning: variable 
'pointerToNonConstDummyClass' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyClass &referenceToNonConstDummyClass = nonConstClassInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 
'referenceToNonConstDummyClass' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:13: warning: variable 
'referenceToNonConstDummyClass' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:13: warning: variable 
'referenceToNonConstDummyClass' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 int *nonConstPointerToMember = 
&nonConstClassInstance.nonConstPublicMemberVariable;
-// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: variable 'nonConstPointerToMember' 
is non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
-// CHECK-MESSAGES: :[[@LINE-2]]:6: warning: variable 'nonConstPointerToMember' 
provides global access to a non-const object; consider making the pointed-to 
data 'const' [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:6: warning: variable 
'nonConstPointerToMember' is non-const and globally accessible, consider making 
it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:6: warning: variable 
'nonConstPointerToMember' is non-const and globally accessible, consider making 
it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-3]]:6: warning: variable 
'nonConstPointerToMember' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-4]]:6: warning: variable 
'nonConstPointerToMember' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 int *const constPointerToNonConstMember = 
&nonConstClassInstance.nonConstPublicMemberVariable;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 
'constPointerToNonConstMember' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'constPointerToNonConstMember' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'constPointerToNonConstMember' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyClass constClassInstance;
 
 DummyClass *const constPointerToNonConstDummyClass = &nonConstClassInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: variable 
'constPointerToNonConstDummyClass' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:19: warning: variable 
'constPointerToNonConstDummyClass' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:19: warning: variable 
'constPointerToNonConstDummyClass' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyClass *nonConstPointerToConstDummyClass = &constClassInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: variable 
'nonConstPointerToConstDummyClass' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:19: warning: variable 
'nonConstPointerToConstDummyClass' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:19: warning: variable 
'nonConstPointerToConstDummyClass' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyClass *const constPointerToConstDummyClass = &constClassInstance;
 
@@ -83,7 +103,8 @@ const DummyClass &constReferenceToDummyClass = 
constClassInstance;
 
 namespace namespace_name {
 DummyClass nonConstNamespaceClassInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 
'nonConstNamespaceClassInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'nonConstNamespaceClassInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'nonConstNamespaceClassInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyClass constDummyClassInstance;
 } // namespace namespace_name
@@ -95,22 +116,28 @@ enum DummyEnum {
 };
 
 DummyEnum nonConstDummyEnumInstance = DummyEnum::first;
-// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: variable 
'nonConstDummyEnumInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:11: warning: variable 
'nonConstDummyEnumInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:11: warning: variable 
'nonConstDummyEnumInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyEnum *pointerToNonConstDummyEnum = &nonConstDummyEnumInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 
'pointerToNonConstDummyEnum' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
-// CHECK-MESSAGES: :[[@LINE-2]]:12: warning: variable 
'pointerToNonConstDummyEnum' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'pointerToNonConstDummyEnum' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'pointerToNonConstDummyEnum' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-3]]:12: warning: variable 
'pointerToNonConstDummyEnum' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-4]]:12: warning: variable 
'pointerToNonConstDummyEnum' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyEnum &referenceToNonConstDummyEnum = nonConstDummyEnumInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 
'referenceToNonConstDummyEnum' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'referenceToNonConstDummyEnum' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'referenceToNonConstDummyEnum' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyEnum *const constPointerToNonConstDummyEnum = &nonConstDummyEnumInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: variable 
'constPointerToNonConstDummyEnum' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:18: warning: variable 
'constPointerToNonConstDummyEnum' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:18: warning: variable 
'constPointerToNonConstDummyEnum' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyEnum constDummyEnumInstance = DummyEnum::first;
 
 const DummyEnum *nonConstPointerToConstDummyEnum = &constDummyEnumInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: variable 
'nonConstPointerToConstDummyEnum' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:18: warning: variable 
'nonConstPointerToConstDummyEnum' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:18: warning: variable 
'nonConstPointerToConstDummyEnum' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyEnum *const constPointerToConstDummyEnum = &constDummyEnumInstance;
 
@@ -118,7 +145,8 @@ const DummyEnum &referenceToConstDummyEnum = 
constDummyEnumInstance;
 
 namespace namespace_name {
 DummyEnum nonConstNamespaceEnumInstance = DummyEnum::first;
-// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: variable 
'nonConstNamespaceEnumInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:11: warning: variable 
'nonConstNamespaceEnumInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:11: warning: variable 
'nonConstNamespaceEnumInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyEnum constNamespaceEnumInstance = DummyEnum::first;
 } // namespace namespace_name
@@ -126,7 +154,8 @@ const DummyEnum constNamespaceEnumInstance = 
DummyEnum::first;
 namespace {
 DummyEnum nonConstAnonymousNamespaceEnumInstance = DummyEnum::first;
 }
-// CHECK-MESSAGES: :[[@LINE-2]]:11: warning: variable 
'nonConstAnonymousNamespaceEnumInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-2]]:11: warning: variable 
'nonConstAnonymousNamespaceEnumInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE-NOT: [[@LINE-3]]:11: warning: variable 
'nonConstAnonymousNamespaceEnumInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 // CHECKING FOR NON-CONST GLOBAL STRUCT ///////////////////////////////////////
 struct DummyStruct {
@@ -139,21 +168,27 @@ struct DummyStruct {
 };
 
 DummyStruct nonConstDummyStructInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 
'nonConstDummyStructInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:13: warning: variable 
'nonConstDummyStructInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:13: warning: variable 
'nonConstDummyStructInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyStruct *pointerToNonConstDummyStruct = &nonConstDummyStructInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: variable 
'pointerToNonConstDummyStruct' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
-// CHECK-MESSAGES: :[[@LINE-2]]:14: warning: variable 
'pointerToNonConstDummyStruct' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:14: warning: variable 
'pointerToNonConstDummyStruct' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:14: warning: variable 
'pointerToNonConstDummyStruct' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-3]]:14: warning: variable 
'pointerToNonConstDummyStruct' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-4]]:14: warning: variable 
'pointerToNonConstDummyStruct' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyStruct &referenceToNonConstDummyStruct = nonConstDummyStructInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: variable 
'referenceToNonConstDummyStruct' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:14: warning: variable 
'referenceToNonConstDummyStruct' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:14: warning: variable 
'referenceToNonConstDummyStruct' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 DummyStruct *const constPointerToNonConstDummyStruct = 
&nonConstDummyStructInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: variable 
'constPointerToNonConstDummyStruct' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:20: warning: variable 
'constPointerToNonConstDummyStruct' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:20: warning: variable 
'constPointerToNonConstDummyStruct' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyStruct constDummyStructInstance;
 
 const DummyStruct *nonConstPointerToConstDummyStruct = 
&constDummyStructInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: variable 
'nonConstPointerToConstDummyStruct' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:20: warning: variable 
'nonConstPointerToConstDummyStruct' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:20: warning: variable 
'nonConstPointerToConstDummyStruct' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyStruct *const constPointerToConstDummyStruct = 
&constDummyStructInstance;
 
@@ -161,7 +196,8 @@ const DummyStruct &referenceToConstDummyStruct = 
constDummyStructInstance;
 
 namespace namespace_name {
 DummyStruct nonConstNamespaceDummyStructInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 
'nonConstNamespaceDummyStructInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:13: warning: variable 
'nonConstNamespaceDummyStructInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:13: warning: variable 
'nonConstNamespaceDummyStructInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyStruct constNamespaceDummyStructInstance;
 } // namespace namespace_name
@@ -169,7 +205,8 @@ const DummyStruct constNamespaceDummyStructInstance;
 namespace {
 DummyStruct nonConstAnonymousNamespaceStructInstance;
 }
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: variable 
'nonConstAnonymousNamespaceStructInstance' is non-const and globally 
accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-2]]:13: warning: variable 
'nonConstAnonymousNamespaceStructInstance' is non-const and globally 
accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE-NOT: [[@LINE-2]]:13: warning: variable 
'nonConstAnonymousNamespaceStructInstance' is non-const and globally 
accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 // CHECKING FOR NON-CONST GLOBAL UNION ////////////////////////////////////////
 union DummyUnion {
@@ -178,22 +215,28 @@ union DummyUnion {
 };
 
 DummyUnion nonConstUnionIntInstance = {0x0};
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 
'nonConstUnionIntInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'nonConstUnionIntInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'nonConstUnionIntInstance' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyUnion *nonConstPointerToNonConstUnionInt = &nonConstUnionIntInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 
'nonConstPointerToNonConstUnionInt' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: variable 
'nonConstPointerToNonConstUnionInt' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:13: warning: variable 
'nonConstPointerToNonConstUnionInt' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:13: warning: variable 
'nonConstPointerToNonConstUnionInt' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-3]]:13: warning: variable 
'nonConstPointerToNonConstUnionInt' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-4]]:13: warning: variable 
'nonConstPointerToNonConstUnionInt' provides global access to a non-const 
object; consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyUnion *const constPointerToNonConstUnionInt = &nonConstUnionIntInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: variable 
'constPointerToNonConstUnionInt' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:19: warning: variable 
'constPointerToNonConstUnionInt' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:19: warning: variable 
'constPointerToNonConstUnionInt' provides global access to a non-const object; 
consider making the pointed-to data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 DummyUnion &referenceToNonConstUnionInt = nonConstUnionIntInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: variable 
'referenceToNonConstUnionInt' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:13: warning: variable 
'referenceToNonConstUnionInt' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:13: warning: variable 
'referenceToNonConstUnionInt' provides global access to a non-const object; 
consider making the referenced data 'const' 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyUnion constUnionIntInstance = {0x0};
 
 const DummyUnion *nonConstPointerToConstUnionInt = &constUnionIntInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: variable 
'nonConstPointerToConstUnionInt' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:19: warning: variable 
'nonConstPointerToConstUnionInt' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:19: warning: variable 
'nonConstPointerToConstUnionInt' is non-const and globally accessible, consider 
making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyUnion *const constPointerToConstUnionInt = &constUnionIntInstance;
 
@@ -201,7 +244,8 @@ const DummyUnion &referenceToConstUnionInt = 
constUnionIntInstance;
 
 namespace namespace_name {
 DummyUnion nonConstNamespaceDummyUnionInstance;
-// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 
'nonConstNamespaceDummyUnionInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:12: warning: variable 
'nonConstNamespaceDummyUnionInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:12: warning: variable 
'nonConstNamespaceDummyUnionInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 const DummyUnion constNamespaceDummyUnionInstance = {0x0};
 } // namespace namespace_name
@@ -209,7 +253,8 @@ const DummyUnion constNamespaceDummyUnionInstance = {0x0};
 namespace {
 DummyUnion nonConstAnonymousNamespaceUnionInstance = {0x0};
 }
-// CHECK-MESSAGES: :[[@LINE-2]]:12: warning: variable 
'nonConstAnonymousNamespaceUnionInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-2]]:12: warning: variable 
'nonConstAnonymousNamespaceUnionInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE-NOT: [[@LINE-2]]:12: warning: variable 
'nonConstAnonymousNamespaceUnionInstance' is non-const and globally accessible, 
consider making it const [cppcoreguidelines-avoid-non-const-global-variables]
 
 // CHECKING FOR NON-CONST GLOBAL FUNCTION POINTER /////////////////////////////
 int dummyFunction() {
@@ -218,11 +263,13 @@ int dummyFunction() {
 
 typedef int (*functionPointer)();
 functionPointer fp1 = &dummyFunction;
-// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: variable 'fp1' is non-const and 
globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:17: warning: variable 'fp1' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:17: warning: variable 'fp1' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 typedef int (*const functionConstPointer)();
 functionPointer fp2 = &dummyFunction;
-// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: variable 'fp2' is non-const and 
globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-DEFAULT: [[@LINE-1]]:17: warning: variable 'fp2' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
+// CHECK-MESSAGES-NAMESPACE: [[@LINE-2]]:17: warning: variable 'fp2' is 
non-const and globally accessible, consider making it const 
[cppcoreguidelines-avoid-non-const-global-variables]
 
 // CHECKING FOR NON-CONST GLOBAL TEMPLATE VARIABLE ////////////////////////////
 template <class T>

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to