brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 2fc7bb4 Raw
149 lines · plain
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-exception6//7//===----------------------------------------------------------------------===//8//9//  This file defines the TableGen core definitions for the diagnostics10//  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 diagnostics42class TextSubstitution<string Text> {43  string Substitution = Text;44  // TODO: These are only here to allow substitutions to be declared inline with45  // diagnostics46  string Component = "";47  string CategoryName = "";48  bit Deferrable = 0;49}50 51// Diagnostic Categories.  These can be applied to groups or individual52// 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 summary, DiagClass DC, Severity defaultmapping> {71  /// Component is specified by the file with a big let directive.72  string         Component = ?;73  string         Summary = summary;74  DiagClass      Class = DC;75  SFINAEResponse SFINAE = SFINAE_Suppress;76  bit            AccessControl = 0;77  bit            WarningNoWerror = 0;78  bit            ShowInSystemHeader = 0;79  bit            ShowInSystemMacro = 1;80  bit            Deferrable = 0;81  Severity       DefaultSeverity = defaultmapping;82  DiagGroup      Group;83  string         CategoryName = "";84}85 86class SFINAEFailure {87  SFINAEResponse SFINAE = SFINAE_SubstitutionFailure;88}89class NoSFINAE {90  SFINAEResponse SFINAE = SFINAE_Report;91}92class AccessControl {93  SFINAEResponse SFINAE = SFINAE_AccessControl;94}95 96class ShowInSystemHeader {97  bit ShowInSystemHeader = 1;98}99 100class SuppressInSystemHeader {101  bit ShowInSystemHeader = 0;102}103 104class ShowInSystemMacro {105  bit ShowInSystemMacro = 1;106}107 108class SuppressInSystemMacro {109  bit ShowInSystemMacro = 0;110}111 112class Deferrable {113  bit Deferrable = 1;114}115 116class NonDeferrable {117  bit Deferrable = 0;118}119 120// FIXME: ExtWarn and Extension should also be SFINAEFailure by default.121class Error<string str>     : Diagnostic<str, CLASS_ERROR, SEV_Error>, SFINAEFailure {122  bit ShowInSystemHeader = 1;123}124// Warnings default to on (but can be default-off'd with DefaultIgnore).125// This is used for warnings about questionable code; warnings about126// accepted language extensions should use Extension or ExtWarn below instead.127class Warning<string str>   : Diagnostic<str, CLASS_WARNING, SEV_Warning>;128// Remarks can be turned on with -R flags and provide commentary, e.g. on129// optimizer decisions.130class Remark<string str>    : Diagnostic<str, CLASS_REMARK, SEV_Ignored>;131// Extensions are warnings about accepted language extensions.132// Extension warnings are default-off but enabled by -pedantic.133class Extension<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Ignored>;134// ExtWarns are warnings about accepted language extensions.135// ExtWarn warnings are default-on.136class ExtWarn<string str>   : Diagnostic<str, CLASS_EXTENSION, SEV_Warning>;137// Notes can provide supplementary information on errors, warnings, and remarks.138class Note<string str>      : Diagnostic<str, CLASS_NOTE, SEV_Fatal/*ignored*/>;139 140 141class DefaultIgnore { Severity DefaultSeverity = SEV_Ignored; }142class DefaultWarn   { Severity DefaultSeverity = SEV_Warning; }143class DefaultError  { Severity DefaultSeverity = SEV_Error; }144class DefaultFatal  { Severity DefaultSeverity = SEV_Fatal; }145class DefaultWarnNoWerror {146  bit WarningNoWerror = 1;147}148class DefaultRemark { Severity DefaultSeverity = SEV_Remark; }149