diff --git a/clang/include/clang/Basic/Diagnostic.td b/clang/include/clang/Basic/Diagnostic.td index 21de05b707a58..503b833e63bbf 100644 --- a/clang/include/clang/Basic/Diagnostic.td +++ b/clang/include/clang/Basic/Diagnostic.td @@ -55,11 +55,11 @@ class DiagCategory { } // Diagnostic Groups. -class DiagGroup subgroups = []> { +class DiagGroup subgroups = [], code docs = [{}]> { string GroupName = Name; list SubGroups = subgroups; string CategoryName = ""; - code Documentation = [{}]; + code Documentation = docs; } class InGroup { DiagGroup Group = G; } //class IsGroup { DiagGroup Group = DiagGroup; } diff --git a/clang/include/clang/Basic/DiagnosticDocs.td b/clang/include/clang/Basic/DiagnosticDocs.td index bf88d5d04567e..e9862422b4997 100644 --- a/clang/include/clang/Basic/DiagnosticDocs.td +++ b/clang/include/clang/Basic/DiagnosticDocs.td @@ -81,3 +81,9 @@ Diagnostic flags }]; } +defvar GCCWriteStringsDocs = [{ +**Note:** enabling this warning in C will change the semantic behavior of the +program by treating all string literals as having type ``const char *`` +instead of ``char *``. This can cause unexpected behaviors with type-sensitive +constructs like ``_Generic``. +}]; diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 31f64f4eceb7c..0ee43fb8837a1 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -847,7 +847,8 @@ def WritableStrings : DiagGroup<"writable-strings", [DeprecatedWritableStr]>; // // FIXME: Should this affect C++11 (where this is an error, // not just deprecated) or not? -def GCCWriteStrings : DiagGroup<"write-strings" , [WritableStrings]>; +def GCCWriteStrings : DiagGroup<"write-strings" , [WritableStrings], + GCCWriteStringsDocs>; def CharSubscript : DiagGroup<"char-subscripts">; def LargeByValueCopy : DiagGroup<"large-by-value-copy">;