mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-29 12:46:06 +00:00

This causes us to generate an enum to go along with the select diagnostic, which allows for clearer diagnostic error emit lines. The syntax for this is: %enum_select<EnumerationName>{%OptionalEnumeratorName{Text}|{Text2}}0 Where the curley brackets around the select-text are only required if an Enumerator name is provided. The TableGen here emits this as a normal 'select' to the frontend, which permits us to reuse all of the existing 'select' infrastructure. Documentation is the same as well. --------- Co-authored-by: Aaron Ballman <aaron@aaronballman.com>
27 lines
1.1 KiB
TableGen
27 lines
1.1 KiB
TableGen
// RUN: clang-tblgen --gen-clang-diags-enums -I%S %s 2>&1 | FileCheck %s
|
|
include "DiagnosticBase.inc"
|
|
|
|
def Diag : Error<"%enum_select<EnumName>{%Val1{V1}|%Val2{V2}|%Val3{V3}}0">;
|
|
// CHECK: DIAG_ENUM(EnumName)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(0, Val1)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(1, Val2)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(2, Val3)
|
|
// CHECK-NEXT: DIAG_ENUM_END()
|
|
|
|
// These are OK, we permit missing values since they might not be useful.
|
|
def Missing1 : Error<"%enum_select<DupeEnumName1>{V1|%Val2{V2}|%Val3{V3}}0">;
|
|
// CHECK: DIAG_ENUM(DupeEnumName1)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(1, Val2)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(2, Val3)
|
|
// CHECK-NEXT: DIAG_ENUM_END()
|
|
def Missing2 : Error<"%enum_select<DupeEnumName2>{%Val1{V1}|V2|%Val3{V3}}0">;
|
|
// CHECK: DIAG_ENUM(DupeEnumName2)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(0, Val1)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(2, Val3)
|
|
// CHECK-NEXT: DIAG_ENUM_END()
|
|
def Missing3 : Error<"%enum_select<DupeEnumName3>{%Val1{V1}|%Val2{V2}|V3}0">;
|
|
// CHECK: DIAG_ENUM(DupeEnumName3)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(0, Val1)
|
|
// CHECK-NEXT: DIAG_ENUM_ITEM(1, Val2)
|
|
// CHECK-NEXT: DIAG_ENUM_END()
|