2018-05-19 11:12:04 +08:00
|
|
|
//===--- DiagnosticBase.inc - A test file mimicking Diagnostic.td ---------===//
|
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// 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
|
2018-05-19 11:12:04 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// 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 N> {
|
|
|
|
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">;
|
2013-01-11 02:50:46 +08:00
|
|
|
|
|
|
|
// Define the diagnostic classes.
|
|
|
|
class DiagClass;
|
|
|
|
def CLASS_NOTE : DiagClass;
|
2018-05-19 11:12:04 +08:00
|
|
|
def CLASS_REMARK : DiagClass;
|
2013-01-11 02:50:46 +08:00
|
|
|
def CLASS_WARNING : DiagClass;
|
|
|
|
def CLASS_EXTENSION : DiagClass;
|
|
|
|
def CLASS_ERROR : DiagClass;
|
|
|
|
|
2018-05-19 11:12:04 +08:00
|
|
|
// 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 Text> {
|
|
|
|
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 Name> {
|
|
|
|
string CategoryName = Name;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Diagnostic Groups.
|
2013-01-11 02:50:46 +08:00
|
|
|
class DiagGroup<string Name, list<DiagGroup> subgroups = []> {
|
|
|
|
string GroupName = Name;
|
|
|
|
list<DiagGroup> SubGroups = subgroups;
|
|
|
|
string CategoryName = "";
|
2018-05-19 11:12:04 +08:00
|
|
|
code Documentation = [{}];
|
2013-01-11 02:50:46 +08:00
|
|
|
}
|
|
|
|
class InGroup<DiagGroup G> { DiagGroup Group = G; }
|
2018-05-19 11:12:04 +08:00
|
|
|
//class IsGroup<string Name> { DiagGroup Group = DiagGroup<Name>; }
|
|
|
|
|
|
|
|
include "DiagnosticDocs.inc"
|
2013-01-11 02:50:46 +08:00
|
|
|
|
|
|
|
// All diagnostics emitted by the compiler are an indirect subclass of this.
|
2018-05-19 11:12:04 +08:00
|
|
|
class Diagnostic<string text, DiagClass DC, Severity defaultmapping> {
|
|
|
|
/// 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<string str> : Diagnostic<str, CLASS_ERROR, SEV_Error>, 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<string str> : Diagnostic<str, CLASS_WARNING, SEV_Warning>;
|
|
|
|
// Remarks can be turned on with -R flags and provide commentary, e.g. on
|
|
|
|
// optimizer decisions.
|
|
|
|
class Remark<string str> : Diagnostic<str, CLASS_REMARK, SEV_Ignored>;
|
|
|
|
// Extensions are warnings about accepted language extensions.
|
|
|
|
// Extension warnings are default-off but enabled by -pedantic.
|
|
|
|
class Extension<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Ignored>;
|
|
|
|
// ExtWarns are warnings about accepted language extensions.
|
|
|
|
// ExtWarn warnings are default-on.
|
|
|
|
class ExtWarn<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Warning>;
|
|
|
|
// Notes can provide supplementary information on errors, warnings, and remarks.
|
|
|
|
class Note<string str> : Diagnostic<str, CLASS_NOTE, SEV_Fatal/*ignored*/>;
|
|
|
|
|
|
|
|
|
|
|
|
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; }
|