89
89
90
90
use crate :: basic_block:: BasicBlock ;
91
91
use crate :: context:: Context ;
92
+ pub use crate :: debug_info:: flags:: { DIFlags , DIFlagsConstants } ;
92
93
use crate :: module:: Module ;
93
94
use crate :: values:: { AsValueRef , BasicValueEnum , InstructionValue , PointerValue } ;
94
95
#[ llvm_versions( 8.0 ..=latest) ]
@@ -103,9 +104,9 @@ use llvm_sys::debuginfo::{
103
104
LLVMDIBuilderCreateAutoVariable , LLVMDIBuilderCreateBasicType , LLVMDIBuilderCreateCompileUnit ,
104
105
LLVMDIBuilderCreateDebugLocation , LLVMDIBuilderCreateExpression , LLVMDIBuilderCreateFile ,
105
106
LLVMDIBuilderCreateFunction , LLVMDIBuilderCreateLexicalBlock , LLVMDIBuilderCreateMemberType ,
106
- LLVMDIBuilderCreateParameterVariable , LLVMDIBuilderCreateStructType ,
107
- LLVMDIBuilderCreateSubroutineType , LLVMDIBuilderCreateUnionType , LLVMDIBuilderFinalize ,
108
- LLVMDIBuilderInsertDbgValueBefore , LLVMDIBuilderInsertDeclareAtEnd ,
107
+ LLVMDIBuilderCreateNameSpace , LLVMDIBuilderCreateParameterVariable ,
108
+ LLVMDIBuilderCreateStructType , LLVMDIBuilderCreateSubroutineType , LLVMDIBuilderCreateUnionType ,
109
+ LLVMDIBuilderFinalize , LLVMDIBuilderInsertDbgValueBefore , LLVMDIBuilderInsertDeclareAtEnd ,
109
110
LLVMDIBuilderInsertDeclareBefore , LLVMDILocationGetColumn , LLVMDILocationGetLine ,
110
111
LLVMDILocationGetScope , LLVMDITypeGetAlignInBits , LLVMDITypeGetOffsetInBits ,
111
112
LLVMDITypeGetSizeInBits ,
@@ -645,6 +646,27 @@ impl<'ctx> DebugInfoBuilder<'ctx> {
645
646
}
646
647
}
647
648
649
+ pub fn create_namespace (
650
+ & self ,
651
+ scope : DIScope < ' ctx > ,
652
+ name : & str ,
653
+ export_symbols : bool
654
+ ) -> DINamespace < ' ctx > {
655
+ let metadata_ref = unsafe {
656
+ LLVMDIBuilderCreateNameSpace (
657
+ self . builder ,
658
+ scope. metadata_ref ,
659
+ name. as_ptr ( ) as _ ,
660
+ name. len ( ) ,
661
+ export_symbols as _
662
+ )
663
+ } ;
664
+ DINamespace {
665
+ metadata_ref,
666
+ _marker : PhantomData ,
667
+ }
668
+ }
669
+
648
670
/// Insert a variable declaration (`llvm.dbg.declare`) before a specified instruction.
649
671
pub fn insert_declare_before_instruction (
650
672
& self ,
@@ -809,6 +831,22 @@ impl<'ctx> AsDIScope<'ctx> for DICompileUnit<'ctx> {
809
831
}
810
832
}
811
833
834
+ /// Namespace scope for debug info
835
+ #[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
836
+ pub struct DINamespace < ' ctx > {
837
+ pub ( crate ) metadata_ref : LLVMMetadataRef ,
838
+ _marker : PhantomData < & ' ctx Context > ,
839
+ }
840
+
841
+ impl < ' ctx > AsDIScope < ' ctx > for DINamespace < ' ctx > {
842
+ fn as_debug_info_scope ( self ) -> DIScope < ' ctx > {
843
+ DIScope {
844
+ metadata_ref : self . metadata_ref ,
845
+ _marker : PhantomData ,
846
+ }
847
+ }
848
+ }
849
+
812
850
/// Function body scope for debug info
813
851
#[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
814
852
pub struct DISubprogram < ' ctx > {
@@ -999,95 +1037,104 @@ pub struct DIExpression<'ctx> {
999
1037
1000
1038
pub use flags:: * ;
1001
1039
mod flags {
1002
- use llvm_sys:: debuginfo:: { LLVMDIFlags , LLVMDWARFEmissionKind , LLVMDWARFSourceLanguage } ;
1003
-
1004
- /// Debug info flags. Corresponds to `LLVMDIFlags` enum from LLVM.
1005
- #[ llvm_enum( LLVMDIFlags ) ]
1006
- #[ derive( Clone , Copy , Debug , Eq , Hash , Ord , PartialEq , PartialOrd ) ]
1007
- pub enum DIFlags {
1008
- #[ llvm_variant( LLVMDIFlagZero ) ]
1009
- Zero ,
1010
- #[ llvm_variant( LLVMDIFlagPrivate ) ]
1011
- Private ,
1012
- #[ llvm_variant( LLVMDIFlagProtected ) ]
1013
- Protected ,
1014
- #[ llvm_variant( LLVMDIFlagPublic ) ]
1015
- Public ,
1016
- #[ llvm_variant( LLVMDIFlagFwdDecl ) ]
1017
- FwdDecl ,
1018
- #[ llvm_variant( LLVMDIFlagAppleBlock ) ]
1019
- AppleBlock ,
1020
- #[ llvm_versions( 7.0 ..=9.0 ) ]
1021
- #[ llvm_variant( LLVMDIFlagBlockByrefStruct ) ]
1022
- BlockByrefStruct ,
1023
- #[ llvm_variant( LLVMDIFlagVirtual ) ]
1024
- Virtual ,
1025
- #[ llvm_variant( LLVMDIFlagArtificial ) ]
1026
- Artificial ,
1027
- #[ llvm_variant( LLVMDIFlagExplicit ) ]
1028
- Explicit ,
1029
- #[ llvm_variant( LLVMDIFlagPrototyped ) ]
1030
- Prototyped ,
1031
- #[ llvm_variant( LLVMDIFlagObjcClassComplete ) ]
1032
- ObjcClassComplete ,
1033
- #[ llvm_variant( LLVMDIFlagObjectPointer ) ]
1034
- ObjectPointer ,
1035
- #[ llvm_variant( LLVMDIFlagVector ) ]
1036
- Vector ,
1037
- #[ llvm_variant( LLVMDIFlagStaticMember ) ]
1038
- StaticMember ,
1039
- #[ llvm_variant( LLVMDIFlagLValueReference ) ]
1040
- LValueReference ,
1041
- #[ llvm_variant( LLVMDIFlagRValueReference ) ]
1042
- RValueReference ,
1043
- #[ llvm_variant( LLVMDIFlagReserved ) ]
1044
- Reserved ,
1045
- #[ llvm_variant( LLVMDIFlagSingleInheritance ) ]
1046
- SingleInheritance ,
1047
- #[ llvm_variant( LLVMDIFlagMultipleInheritance ) ]
1048
- MultipleInheritance ,
1049
- #[ llvm_variant( LLVMDIFlagVirtualInheritance ) ]
1050
- VirtualInheritance ,
1051
- #[ llvm_variant( LLVMDIFlagIntroducedVirtual ) ]
1052
- IntroducedVirtual ,
1053
- #[ llvm_variant( LLVMDIFlagBitField ) ]
1054
- BitField ,
1055
- #[ llvm_variant( LLVMDIFlagNoReturn ) ]
1056
- NoReturn ,
1057
- #[ llvm_versions( 7.0 ..=8.0 ) ]
1058
- #[ llvm_variant( LLVMDIFlagMainSubprogram ) ]
1059
- MainSubprogram ,
1060
- #[ llvm_variant( LLVMDIFlagTypePassByValue ) ]
1061
- TypePassByValue ,
1062
- #[ llvm_variant( LLVMDIFlagTypePassByReference ) ]
1063
- TypePassByReference ,
1064
- #[ llvm_versions( 7.0 ) ]
1065
- #[ llvm_variant( LLVMDIFlagFixedEnum ) ]
1066
- FixedEnum ,
1067
- #[ llvm_versions( 8.0 ..=latest) ]
1068
- #[ llvm_variant( LLVMDIFlagEnumClass ) ]
1069
- EnumClass ,
1070
- #[ llvm_variant( LLVMDIFlagThunk ) ]
1071
- Thunk ,
1072
- #[ llvm_versions( 7.0 ..=8.0 ) ]
1073
- #[ llvm_variant( LLVMDIFlagTrivial ) ]
1074
- Trivial ,
1075
- #[ llvm_versions( 9.0 ..=latest) ]
1076
- #[ llvm_variant( LLVMDIFlagNonTrivial ) ]
1077
- NonTrivial ,
1078
- #[ llvm_versions( 10.0 ) ]
1079
- #[ llvm_variant( LLVMDIFlagReservedBit4 ) ]
1080
- ReservedBit4 ,
1081
- #[ llvm_versions( 8.0 ..=latest) ]
1082
- #[ llvm_variant( LLVMDIFlagBigendian ) ]
1083
- BigEndian ,
1084
- #[ llvm_versions( 8.0 ..=latest) ]
1085
- #[ llvm_variant( LLVMDIFlagLittleEndian ) ]
1086
- LittleEndian ,
1087
- #[ llvm_variant( LLVMDIFlagIndirectVirtualBase ) ]
1088
- IndirectVirtualBase ,
1040
+ use llvm_sys:: debuginfo:: { LLVMDWARFEmissionKind , LLVMDWARFSourceLanguage } ;
1041
+ pub use llvm_sys:: debuginfo:: LLVMDIFlags as DIFlags ;
1042
+
1043
+ pub trait DIFlagsConstants {
1044
+ const ZERO : Self ;
1045
+ const PRIVATE : Self ;
1046
+ const PROTECTED : Self ;
1047
+ const PUBLIC : Self ;
1048
+ const FWD_DECL : Self ;
1049
+ const APPLE_BLOCK : Self ;
1050
+ //#[llvm_versions(7.0..=9.0)]
1051
+ //const BLOCK_BYREF_STRUCT: Self;
1052
+ const VIRTUAL : Self ;
1053
+ const ARTIFICIAL : Self ;
1054
+ const EXPLICIT : Self ;
1055
+ const PROTOTYPED : Self ;
1056
+ const OBJC_CLASS_COMPLETE : Self ;
1057
+ const OBJECT_POINTER : Self ;
1058
+ const VECTOR : Self ;
1059
+ const STATIC_MEMBER : Self ;
1060
+ const LVALUE_REFERENCE : Self ;
1061
+ const RVALUE_REFERENCE : Self ;
1062
+ const RESERVED : Self ;
1063
+ const SINGLE_INHERITANCE : Self ;
1064
+ const MULTIPLE_INHERITANCE : Self ;
1065
+ const VIRTUAL_INHERITANCE : Self ;
1066
+ const INTRODUCED_VIRTUAL : Self ;
1067
+ const BIT_FIELD : Self ;
1068
+ const NO_RETURN : Self ;
1069
+ //#[llvm_versions(7.0..=8.0)]
1070
+ //const MAIN_SUBPROGRAM: Self;
1071
+ const TYPE_PASS_BY_VALUE : Self ;
1072
+ const TYPE_PASS_BY_REFERENCE : Self ;
1073
+ //#[llvm_versions(7.0)]
1074
+ //const FIXED_ENUM: Self;
1075
+ //#[llvm_versions(8.0..=latest)]
1076
+ //const ENUM_CLASS: Self;
1077
+ const THUNK : Self ;
1078
+ //#[llvm_versions(7.0..=8.0)]
1079
+ //const TRIVIAL: Self;
1080
+ //#[llvm_versions(9.0..=latest)]
1081
+ //const NON_TRIVIAL: Self;
1082
+ //#[llvm_versions(10.0)]
1083
+ //const RESERVED_BIT4: Self;
1084
+ //#[llvm_versions(8.0..=latest)]
1085
+ //const BIGE_NDIAN: Self;
1086
+ //#[llvm_versions(8.0..=latest)]
1087
+ //const LITTLE_ENDIAN: Self;
1088
+ const INDIRECT_VIRTUAL_BASE : Self ;
1089
1089
}
1090
-
1090
+ impl DIFlagsConstants for DIFlags {
1091
+ const ZERO : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagZero ;
1092
+ const PRIVATE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagPrivate ;
1093
+ const PROTECTED : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagProtected ;
1094
+ const PUBLIC : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagPublic ;
1095
+ const FWD_DECL : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagFwdDecl ;
1096
+ const APPLE_BLOCK : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagAppleBlock ;
1097
+ //#[llvm_versions(7.0..=9.0)]
1098
+ //const BLOCK_BYREF_STRUCT: DIFlags = llvm_sys::debuginfo::LLVMDIFlagBlockByrefStruct;
1099
+ const VIRTUAL : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagVirtual ;
1100
+ const ARTIFICIAL : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagArtificial ;
1101
+ const EXPLICIT : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagExplicit ;
1102
+ const PROTOTYPED : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagPrototyped ;
1103
+ const OBJC_CLASS_COMPLETE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagObjcClassComplete ;
1104
+ const OBJECT_POINTER : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagObjectPointer ;
1105
+ const VECTOR : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagVector ;
1106
+ const STATIC_MEMBER : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagStaticMember ;
1107
+ const LVALUE_REFERENCE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagLValueReference ;
1108
+ const RVALUE_REFERENCE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagRValueReference ;
1109
+ const RESERVED : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagReserved ;
1110
+ const SINGLE_INHERITANCE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagSingleInheritance ;
1111
+ const MULTIPLE_INHERITANCE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagMultipleInheritance ;
1112
+ const VIRTUAL_INHERITANCE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagVirtualInheritance ;
1113
+ const INTRODUCED_VIRTUAL : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagIntroducedVirtual ;
1114
+ const BIT_FIELD : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagBitField ;
1115
+ const NO_RETURN : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagNoReturn ;
1116
+ //#[llvm_versions(7.0..=8.0)]
1117
+ //const MAIN_SUBPROGRAM: DIFlags = llvm_sys::debuginfo::LLVMDIFlagMainSubprogram;
1118
+ const TYPE_PASS_BY_VALUE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagTypePassByValue ;
1119
+ const TYPE_PASS_BY_REFERENCE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagTypePassByReference ;
1120
+ //#[llvm_versions(7.0)]
1121
+ //const FIXED_ENUM: DIFlags = llvm_sys::debuginfo::LLVMDIFlagFixedEnum;
1122
+ //#[llvm_versions(8.0..=latest)]
1123
+ //const ENUM_CLASS: DIFlags = llvm_sys::debuginfo::LLVMDIFlagEnumClass;
1124
+ const THUNK : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagThunk ;
1125
+ //#[llvm_versions(7.0..=8.0)]
1126
+ //const TRIVIAL: DIFlags = llvm_sys::debuginfo::LLVMDIFlagTrivial;
1127
+ //#[llvm_versions(9.0..=latest)]
1128
+ //const NON_TRIVIAL: DIFlags = llvm_sys::debuginfo::LLVMDIFlagNonTrivial;
1129
+ //#[llvm_versions(10.0)]
1130
+ //const RESERVED_BIT4: DIFlags = llvm_sys::debuginfo::LLVMDIFlagReservedBit4;
1131
+ //#[llvm_versions(8.0..=latest)]
1132
+ //const BIG_ENDIAN: DIFlags = llvm_sys::debuginfo::LLVMDIFlagBigEndian;
1133
+ //#[llvm_versions(8.0..=latest)]
1134
+ //const LITTLE_ENDIAN: DIFlags = llvm_sys::debuginfo::LLVMDIFlagLittleEndian;
1135
+ const INDIRECT_VIRTUAL_BASE : DIFlags = llvm_sys:: debuginfo:: LLVMDIFlagIndirectVirtualBase ;
1136
+ }
1137
+
1091
1138
/// The amount of debug information to emit. Corresponds to `LLVMDWARFEmissionKind` enum from LLVM.
1092
1139
#[ llvm_enum( LLVMDWARFEmissionKind ) ]
1093
1140
#[ derive( Clone , Copy , Debug , Eq , Hash , Ord , PartialEq , PartialOrd ) ]
0 commit comments