//===--- DiagnosticBase.inc - A test file mimicking Diagnostic.td ---------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the TableGen core definitions for the diagnostics // and diagnostic control. // //===----------------------------------------------------------------------===// // See the Internals Manual, section The Diagnostics Subsystem for an overview. // Define the diagnostic severities. class Severity { string Name = N; } def SEV_Ignored : Severity<"Ignored">; def SEV_Remark : Severity<"Remark">; def SEV_Warning : Severity<"Warning">; def SEV_Error : Severity<"Error">; def SEV_Fatal : Severity<"Fatal">; // Define the diagnostic classes. class DiagClass; def CLASS_NOTE : DiagClass; def CLASS_REMARK : DiagClass; def CLASS_WARNING : DiagClass; def CLASS_EXTENSION : DiagClass; def CLASS_ERROR : DiagClass; // Responses to a diagnostic in a SFINAE context. class SFINAEResponse; def SFINAE_SubstitutionFailure : SFINAEResponse; def SFINAE_Suppress : SFINAEResponse; def SFINAE_Report : SFINAEResponse; def SFINAE_AccessControl : SFINAEResponse; // Textual substitutions which may be performed on the text of diagnostics class TextSubstitution { string Substitution = Text; // TODO: These are only here to allow substitutions to be declared inline with // diagnostics string Component = ""; string CategoryName = ""; } // Diagnostic Categories. These can be applied to groups or individual // diagnostics to specify a category. class DiagCategory { string CategoryName = Name; } // Diagnostic Groups. class DiagGroup subgroups = []> { string GroupName = Name; list SubGroups = subgroups; string CategoryName = ""; code Documentation = [{}]; } class InGroup { DiagGroup Group = G; } //class IsGroup { DiagGroup Group = DiagGroup; } include "DiagnosticDocs.inc" // All diagnostics emitted by the compiler are an indirect subclass of this. class Diagnostic { /// Component is specified by the file with a big let directive. string Component = ?; string Text = text; DiagClass Class = DC; SFINAEResponse SFINAE = SFINAE_Suppress; bit AccessControl = 0; bit WarningNoWerror = 0; bit ShowInSystemHeader = 0; Severity DefaultSeverity = defaultmapping; DiagGroup Group; string CategoryName = ""; } class SFINAEFailure { SFINAEResponse SFINAE = SFINAE_SubstitutionFailure; } class NoSFINAE { SFINAEResponse SFINAE = SFINAE_Report; } class AccessControl { SFINAEResponse SFINAE = SFINAE_AccessControl; } class ShowInSystemHeader { bit ShowInSystemHeader = 1; } class SuppressInSystemHeader { bit ShowInSystemHeader = 0; } // FIXME: ExtWarn and Extension should also be SFINAEFailure by default. class Error : Diagnostic, SFINAEFailure { bit ShowInSystemHeader = 1; } // Warnings default to on (but can be default-off'd with DefaultIgnore). // This is used for warnings about questionable code; warnings about // accepted language extensions should use Extension or ExtWarn below instead. class Warning : Diagnostic; // Remarks can be turned on with -R flags and provide commentary, e.g. on // optimizer decisions. class Remark : Diagnostic; // Extensions are warnings about accepted language extensions. // Extension warnings are default-off but enabled by -pedantic. class Extension : Diagnostic; // ExtWarns are warnings about accepted language extensions. // ExtWarn warnings are default-on. class ExtWarn : Diagnostic; // Notes can provide supplementary information on errors, warnings, and remarks. class Note : Diagnostic; class DefaultIgnore { Severity DefaultSeverity = SEV_Ignored; } class DefaultWarn { Severity DefaultSeverity = SEV_Warning; } class DefaultError { Severity DefaultSeverity = SEV_Error; } class DefaultFatal { Severity DefaultSeverity = SEV_Fatal; } class DefaultWarnNoWerror { bit WarningNoWerror = 1; } class DefaultRemark { Severity DefaultSeverity = SEV_Remark; }