1//===--- Diagnostic.td - C Language Family Diagnostic Handling ------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines the TableGen core definitions for the diagnostics 10// and diagnostic control. 11// 12//===----------------------------------------------------------------------===// 13 14// See the Internals Manual, section The Diagnostics Subsystem for an overview. 15 16// Define the diagnostic severities. 17class Severity<string N> { 18 string Name = N; 19} 20def SEV_Ignored : Severity<"Ignored">; 21def SEV_Remark : Severity<"Remark">; 22def SEV_Warning : Severity<"Warning">; 23def SEV_Error : Severity<"Error">; 24def SEV_Fatal : Severity<"Fatal">; 25 26// Define the diagnostic classes. 27class DiagClass; 28def CLASS_NOTE : DiagClass; 29def CLASS_REMARK : DiagClass; 30def CLASS_WARNING : DiagClass; 31def CLASS_EXTENSION : DiagClass; 32def CLASS_ERROR : DiagClass; 33 34// Responses to a diagnostic in a SFINAE context. 35class SFINAEResponse; 36def SFINAE_SubstitutionFailure : SFINAEResponse; 37def SFINAE_Suppress : SFINAEResponse; 38def SFINAE_Report : SFINAEResponse; 39def SFINAE_AccessControl : SFINAEResponse; 40 41// Textual substitutions which may be performed on the text of diagnostics 42class TextSubstitution<string Text> { 43 string Substitution = Text; 44 // TODO: These are only here to allow substitutions to be declared inline with 45 // diagnostics 46 string Component = ""; 47 string CategoryName = ""; 48} 49 50// Diagnostic Categories. These can be applied to groups or individual 51// diagnostics to specify a category. 52class DiagCategory<string Name> { 53 string CategoryName = Name; 54} 55 56// Diagnostic Groups. 57class DiagGroup<string Name, list<DiagGroup> subgroups = []> { 58 string GroupName = Name; 59 list<DiagGroup> SubGroups = subgroups; 60 string CategoryName = ""; 61 code Documentation = [{}]; 62} 63class InGroup<DiagGroup G> { DiagGroup Group = G; } 64//class IsGroup<string Name> { DiagGroup Group = DiagGroup<Name>; } 65 66// This defines documentation for diagnostic groups. 67include "DiagnosticDocs.td" 68 69// This defines all of the named diagnostic categories. 70include "DiagnosticCategories.td" 71 72// This defines all of the named diagnostic groups. 73include "DiagnosticGroups.td" 74 75 76// All diagnostics emitted by the compiler are an indirect subclass of this. 77class Diagnostic<string text, DiagClass DC, Severity defaultmapping> { 78 /// Component is specified by the file with a big let directive. 79 string Component = ?; 80 string Text = text; 81 DiagClass Class = DC; 82 SFINAEResponse SFINAE = SFINAE_Suppress; 83 bit AccessControl = 0; 84 bit WarningNoWerror = 0; 85 bit ShowInSystemHeader = 0; 86 Severity DefaultSeverity = defaultmapping; 87 DiagGroup Group; 88 string CategoryName = ""; 89} 90 91class SFINAEFailure { 92 SFINAEResponse SFINAE = SFINAE_SubstitutionFailure; 93} 94class NoSFINAE { 95 SFINAEResponse SFINAE = SFINAE_Report; 96} 97class AccessControl { 98 SFINAEResponse SFINAE = SFINAE_AccessControl; 99} 100 101class ShowInSystemHeader { 102 bit ShowInSystemHeader = 1; 103} 104 105class SuppressInSystemHeader { 106 bit ShowInSystemHeader = 0; 107} 108 109// FIXME: ExtWarn and Extension should also be SFINAEFailure by default. 110class Error<string str> : Diagnostic<str, CLASS_ERROR, SEV_Error>, SFINAEFailure { 111 bit ShowInSystemHeader = 1; 112} 113// Warnings default to on (but can be default-off'd with DefaultIgnore). 114// This is used for warnings about questionable code; warnings about 115// accepted language extensions should use Extension or ExtWarn below instead. 116class Warning<string str> : Diagnostic<str, CLASS_WARNING, SEV_Warning>; 117// Remarks can be turned on with -R flags and provide commentary, e.g. on 118// optimizer decisions. 119class Remark<string str> : Diagnostic<str, CLASS_REMARK, SEV_Ignored>; 120// Extensions are warnings about accepted language extensions. 121// Extension warnings are default-off but enabled by -pedantic. 122class Extension<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Ignored>; 123// ExtWarns are warnings about accepted language extensions. 124// ExtWarn warnings are default-on. 125class ExtWarn<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Warning>; 126// Notes can provide supplementary information on errors, warnings, and remarks. 127class Note<string str> : Diagnostic<str, CLASS_NOTE, SEV_Fatal/*ignored*/>; 128 129 130class DefaultIgnore { Severity DefaultSeverity = SEV_Ignored; } 131class DefaultWarn { Severity DefaultSeverity = SEV_Warning; } 132class DefaultError { Severity DefaultSeverity = SEV_Error; } 133class DefaultFatal { Severity DefaultSeverity = SEV_Fatal; } 134class DefaultWarnNoWerror { 135 bit WarningNoWerror = 1; 136} 137class DefaultRemark { Severity DefaultSeverity = SEV_Remark; } 138 139// Definitions for Diagnostics. 140include "DiagnosticASTKinds.td" 141include "DiagnosticAnalysisKinds.td" 142include "DiagnosticCommentKinds.td" 143include "DiagnosticCommonKinds.td" 144include "DiagnosticCrossTUKinds.td" 145include "DiagnosticDriverKinds.td" 146include "DiagnosticFrontendKinds.td" 147include "DiagnosticLexKinds.td" 148include "DiagnosticParseKinds.td" 149include "DiagnosticRefactoringKinds.td" 150include "DiagnosticSemaKinds.td" 151include "DiagnosticSerializationKinds.td" 152 153