1//===--- DiagnosticBase.inc - A test file mimicking Diagnostic.td ---------===// 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 bit Deferrable = 0; 49} 50 51// Diagnostic Categories. These can be applied to groups or individual 52// diagnostics to specify a category. 53class DiagCategory<string Name> { 54 string CategoryName = Name; 55} 56 57// Diagnostic Groups. 58class DiagGroup<string Name, list<DiagGroup> subgroups = []> { 59 string GroupName = Name; 60 list<DiagGroup> SubGroups = subgroups; 61 string CategoryName = ""; 62 code Documentation = [{}]; 63} 64class InGroup<DiagGroup G> { DiagGroup Group = G; } 65//class IsGroup<string Name> { DiagGroup Group = DiagGroup<Name>; } 66 67include "DiagnosticDocs.inc" 68 69// All diagnostics emitted by the compiler are an indirect subclass of this. 70class Diagnostic<string text, DiagClass DC, Severity defaultmapping> { 71 /// Component is specified by the file with a big let directive. 72 string Component = ?; 73 string Text = text; 74 DiagClass Class = DC; 75 SFINAEResponse SFINAE = SFINAE_Suppress; 76 bit AccessControl = 0; 77 bit WarningNoWerror = 0; 78 bit ShowInSystemHeader = 0; 79 bit Deferrable = 0; 80 Severity DefaultSeverity = defaultmapping; 81 DiagGroup Group; 82 string CategoryName = ""; 83} 84 85class SFINAEFailure { 86 SFINAEResponse SFINAE = SFINAE_SubstitutionFailure; 87} 88class NoSFINAE { 89 SFINAEResponse SFINAE = SFINAE_Report; 90} 91class AccessControl { 92 SFINAEResponse SFINAE = SFINAE_AccessControl; 93} 94 95class ShowInSystemHeader { 96 bit ShowInSystemHeader = 1; 97} 98 99class SuppressInSystemHeader { 100 bit ShowInSystemHeader = 0; 101} 102 103class Deferrable { 104 bit Deferrable = 1; 105} 106 107class NonDeferrable { 108 bit Deferrable = 0; 109} 110 111// FIXME: ExtWarn and Extension should also be SFINAEFailure by default. 112class Error<string str> : Diagnostic<str, CLASS_ERROR, SEV_Error>, SFINAEFailure { 113 bit ShowInSystemHeader = 1; 114} 115// Warnings default to on (but can be default-off'd with DefaultIgnore). 116// This is used for warnings about questionable code; warnings about 117// accepted language extensions should use Extension or ExtWarn below instead. 118class Warning<string str> : Diagnostic<str, CLASS_WARNING, SEV_Warning>; 119// Remarks can be turned on with -R flags and provide commentary, e.g. on 120// optimizer decisions. 121class Remark<string str> : Diagnostic<str, CLASS_REMARK, SEV_Ignored>; 122// Extensions are warnings about accepted language extensions. 123// Extension warnings are default-off but enabled by -pedantic. 124class Extension<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Ignored>; 125// ExtWarns are warnings about accepted language extensions. 126// ExtWarn warnings are default-on. 127class ExtWarn<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Warning>; 128// Notes can provide supplementary information on errors, warnings, and remarks. 129class Note<string str> : Diagnostic<str, CLASS_NOTE, SEV_Fatal/*ignored*/>; 130 131 132class DefaultIgnore { Severity DefaultSeverity = SEV_Ignored; } 133class DefaultWarn { Severity DefaultSeverity = SEV_Warning; } 134class DefaultError { Severity DefaultSeverity = SEV_Error; } 135class DefaultFatal { Severity DefaultSeverity = SEV_Fatal; } 136class DefaultWarnNoWerror { 137 bit WarningNoWerror = 1; 138} 139class DefaultRemark { Severity DefaultSeverity = SEV_Remark; } 140