@@ -66,6 +66,33 @@ namespace dwarf {
6666enum Tag : uint16_t ;
6767}
6868
69+ // / Wrapper structure that holds a language name and its version.
70+ // /
71+ // / Some debug-info formats, particularly DWARF, distniguish between
72+ // / language codes that include the version name and codes that don't.
73+ // / DISourceLanguageName may hold either of these.
74+ // /
75+ class DISourceLanguageName {
76+ // / Language name.
77+ // / If \ref Version is not std::nullopt, then this name
78+ // / is version independent (i.e., doesn't include the language
79+ // / version in its name).
80+ uint16_t Name;
81+
82+ // / Language version. The version scheme is language
83+ // / dependent.
84+ std::optional<uint32_t > Version;
85+
86+ public:
87+ bool hasVersionedName () const { return Version.has_value (); }
88+
89+ uint16_t getName () const { return Name; }
90+
91+ DISourceLanguageName (uint16_t Lang, uint32_t Version)
92+ : Name(Lang), Version(Version) {};
93+ DISourceLanguageName (uint16_t Lang) : Name(Lang), Version(std::nullopt ) {};
94+ };
95+
6996class DbgVariableRecord ;
7097
7198LLVM_ABI extern cl::opt<bool > EnableFSDiscriminator;
@@ -2003,7 +2030,7 @@ class DICompileUnit : public DIScope {
20032030 LLVM_ABI static const char *nameTableKindString (DebugNameTableKind PK);
20042031
20052032private:
2006- unsigned SourceLanguage;
2033+ DISourceLanguageName SourceLanguage;
20072034 unsigned RuntimeVersion;
20082035 uint64_t DWOId;
20092036 unsigned EmissionKind;
@@ -2013,16 +2040,17 @@ class DICompileUnit : public DIScope {
20132040 bool DebugInfoForProfiling;
20142041 bool RangesBaseAddress;
20152042
2016- DICompileUnit (LLVMContext &C, StorageType Storage, unsigned SourceLanguage,
2017- bool IsOptimized, unsigned RuntimeVersion,
2018- unsigned EmissionKind, uint64_t DWOId, bool SplitDebugInlining,
2019- bool DebugInfoForProfiling, unsigned NameTableKind,
2020- bool RangesBaseAddress, ArrayRef<Metadata *> Ops);
2043+ DICompileUnit (LLVMContext &C, StorageType Storage,
2044+ DISourceLanguageName SourceLanguage, bool IsOptimized,
2045+ unsigned RuntimeVersion, unsigned EmissionKind, uint64_t DWOId,
2046+ bool SplitDebugInlining, bool DebugInfoForProfiling,
2047+ unsigned NameTableKind, bool RangesBaseAddress,
2048+ ArrayRef<Metadata *> Ops);
20212049 ~DICompileUnit () = default ;
20222050
20232051 static DICompileUnit *
2024- getImpl (LLVMContext &Context, unsigned SourceLanguage, DIFile *File ,
2025- StringRef Producer, bool IsOptimized, StringRef Flags,
2052+ getImpl (LLVMContext &Context, DISourceLanguageName SourceLanguage,
2053+ DIFile *File, StringRef Producer, bool IsOptimized, StringRef Flags,
20262054 unsigned RuntimeVersion, StringRef SplitDebugFilename,
20272055 unsigned EmissionKind, DICompositeTypeArray EnumTypes,
20282056 DIScopeArray RetainedTypes,
@@ -2042,8 +2070,8 @@ class DICompileUnit : public DIScope {
20422070 getCanonicalMDString (Context, SDK), Storage, ShouldCreate);
20432071 }
20442072 LLVM_ABI static DICompileUnit *
2045- getImpl (LLVMContext &Context, unsigned SourceLanguage, Metadata *File ,
2046- MDString *Producer, bool IsOptimized, MDString *Flags,
2073+ getImpl (LLVMContext &Context, DISourceLanguageName SourceLanguage,
2074+ Metadata *File, MDString *Producer, bool IsOptimized, MDString *Flags,
20472075 unsigned RuntimeVersion, MDString *SplitDebugFilename,
20482076 unsigned EmissionKind, Metadata *EnumTypes, Metadata *RetainedTypes,
20492077 Metadata *GlobalVariables, Metadata *ImportedEntities,
@@ -2068,7 +2096,7 @@ class DICompileUnit : public DIScope {
20682096
20692097 DEFINE_MDNODE_GET_DISTINCT_TEMPORARY (
20702098 DICompileUnit,
2071- (unsigned SourceLanguage, DIFile *File, StringRef Producer,
2099+ (DISourceLanguageName SourceLanguage, DIFile *File, StringRef Producer,
20722100 bool IsOptimized, StringRef Flags, unsigned RuntimeVersion,
20732101 StringRef SplitDebugFilename, DebugEmissionKind EmissionKind,
20742102 DICompositeTypeArray EnumTypes, DIScopeArray RetainedTypes,
@@ -2084,7 +2112,7 @@ class DICompileUnit : public DIScope {
20842112 SysRoot, SDK))
20852113 DEFINE_MDNODE_GET_DISTINCT_TEMPORARY (
20862114 DICompileUnit,
2087- (unsigned SourceLanguage, Metadata *File, MDString *Producer,
2115+ (DISourceLanguageName SourceLanguage, Metadata *File, MDString *Producer,
20882116 bool IsOptimized, MDString *Flags, unsigned RuntimeVersion,
20892117 MDString *SplitDebugFilename, unsigned EmissionKind, Metadata *EnumTypes,
20902118 Metadata *RetainedTypes, Metadata *GlobalVariables,
@@ -2099,7 +2127,7 @@ class DICompileUnit : public DIScope {
20992127
21002128 TempDICompileUnit clone () const { return cloneImpl (); }
21012129
2102- unsigned getSourceLanguage () const { return SourceLanguage; }
2130+ DISourceLanguageName getSourceLanguage () const { return SourceLanguage; }
21032131 bool isOptimized () const { return IsOptimized; }
21042132 unsigned getRuntimeVersion () const { return RuntimeVersion; }
21052133 DebugEmissionKind getEmissionKind () const {
0 commit comments