@@ -335,7 +335,7 @@ def LLVM_DIEncodingParameter : LLVM_DIParameter<
335335>;
336336
337337def LLVM_DILanguageParameter : LLVM_DIParameter<
338- "language", /*default=*/"", "Language", /*errorCase=*/"0"
338+ "language", /*default=*/"0 ", "Language", /*errorCase=*/"0"
339339>;
340340
341341def LLVM_DITagParameter : LLVM_DIParameter<
@@ -417,14 +417,19 @@ def LLVM_DIBasicTypeAttr : LLVM_Attr<"DIBasicType", "di_basic_type",
417417//===----------------------------------------------------------------------===//
418418
419419def LLVM_DICompileUnitAttr : LLVM_Attr<"DICompileUnit", "di_compile_unit",
420- /*traits=*/[], "DIScopeAttr"> {
420+ [LLVM_DIRecursiveTypeAttrInterface],
421+ "DIScopeAttr"> {
421422 let parameters = (ins
422- "DistinctAttr":$id,
423+ // DIRecursiveTypeAttrInterface specific parameters.
424+ OptionalParameter<"DistinctAttr">:$recId,
425+ OptionalParameter<"bool">:$isRecSelf,
426+ // DICompileUnitAttr specific parameters.
427+ OptionalParameter<"DistinctAttr">:$id,
423428 LLVM_DILanguageParameter:$sourceLanguage,
424- "DIFileAttr":$file,
429+ OptionalParameter< "DIFileAttr"> :$file,
425430 OptionalParameter<"StringAttr">:$producer,
426- "bool":$isOptimized,
427- "DIEmissionKind":$emissionKind,
431+ OptionalParameter< "bool"> :$isOptimized,
432+ OptionalParameter< "DIEmissionKind"> :$emissionKind,
428433 OptionalParameter<"bool">:$isDebugInfoForProfiling,
429434 OptionalParameter<"DINameTableKind">:$nameTableKind,
430435 OptionalParameter<"StringAttr">:$splitDebugFilename,
@@ -440,12 +445,25 @@ def LLVM_DICompileUnitAttr : LLVM_Attr<"DICompileUnit", "di_compile_unit",
440445 CArg<"StringAttr", "{}">:$splitDebugFilename,
441446 CArg<"ArrayRef<DINodeAttr>", "{}">:$importedEntities
442447 ), [{
443- return $_get(id.getContext(), id, sourceLanguage, file, producer,
444- isOptimized, emissionKind, isDebugInfoForProfiling,
445- nameTableKind, splitDebugFilename, importedEntities);
448+ return $_get(id.getContext(), /*recId=*/nullptr, /*isRecSelf=*/false, id,
449+ sourceLanguage, file, producer, isOptimized, emissionKind,
450+ isDebugInfoForProfiling, nameTableKind, splitDebugFilename,
451+ importedEntities);
446452 }]>
447453 ];
448454 let assemblyFormat = "`<` struct(params) `>`";
455+ let extraClassDeclaration = [{
456+ /// Requirements of DIRecursiveTypeAttrInterface.
457+ /// @{
458+
459+ /// Get a copy of this attr but with the recursive ID set to `recId`.
460+ DIRecursiveTypeAttrInterface withRecId(DistinctAttr recId);
461+
462+ /// Build a rec-self instance using the provided `recId`.
463+ static DIRecursiveTypeAttrInterface getRecSelf(DistinctAttr recId);
464+
465+ /// @}
466+ }];
449467
450468 // Generate mnemonic alias for the attribute.
451469 let genMnemonicAlias = 1;
0 commit comments