@@ -607,9 +607,6 @@ fn tuple_metadata(cx: &mut CrateContext,
607
607
span) ;
608
608
}
609
609
610
- // The stage0 snapshot does not yet support the fixes from PR #7557, so there are two versions of
611
- // following function for now
612
- #[ cfg( not( stage0) ) ]
613
610
fn enum_metadata ( cx : & mut CrateContext ,
614
611
enum_type : ty:: t ,
615
612
enum_def_id : ast:: def_id ,
@@ -772,142 +769,6 @@ fn enum_metadata(cx: &mut CrateContext,
772
769
}
773
770
}
774
771
775
- #[ cfg( stage0) ]
776
- fn enum_metadata ( cx : & mut CrateContext ,
777
- enum_type : ty:: t ,
778
- enum_def_id : ast:: def_id ,
779
- substs : & ty:: substs ,
780
- span : span )
781
- -> DIType {
782
-
783
- let enum_name = ty_to_str ( cx. tcx , enum_type) ;
784
-
785
- // For empty enums there is an early exit. Just describe it as an empty struct with the
786
- // appropriate type name
787
- if ty:: type_is_empty ( cx. tcx , enum_type) {
788
- return composite_type_metadata ( cx, Type :: nil ( ) , enum_name, & [ ] , & [ ] , & [ ] , span) ;
789
- }
790
-
791
- // Prepare some data (llvm type, size, align, ...) about the discriminant. This data will be
792
- // needed in all of the following cases.
793
- let discriminant_llvm_type = Type :: enum_discrim ( cx) ;
794
- let ( discriminant_size, discriminant_align) = size_and_align_of ( cx, discriminant_llvm_type) ;
795
-
796
- assert ! ( Type :: enum_discrim( cx) == cx. int_type) ;
797
- let discriminant_type_metadata = type_metadata ( cx, ty:: mk_int ( ) , span) ;
798
-
799
- let variants: & [ @ty:: VariantInfo ] = * ty:: enum_variants ( cx. tcx , enum_def_id) ;
800
-
801
- let enumerators_metadata: ~[ DIDescriptor ] = variants
802
- . iter ( )
803
- . transform ( |v| {
804
- let name: & str = cx. sess . str_of ( v. name ) ;
805
- let discriminant_value = v. disr_val as c_ulonglong ;
806
-
807
- do name. as_c_str |name| {
808
- unsafe {
809
- llvm:: LLVMDIBuilderCreateEnumerator (
810
- DIB ( cx) ,
811
- name,
812
- discriminant_value)
813
- }
814
- }
815
- } )
816
- . collect ( ) ;
817
-
818
- let loc = span_start ( cx, span) ;
819
- let file_metadata = file_metadata ( cx, loc. file . name ) ;
820
-
821
- let discriminant_type_metadata = do enum_name. as_c_str |enum_name| {
822
- unsafe {
823
- llvm:: LLVMDIBuilderCreateEnumerationType (
824
- DIB ( cx) ,
825
- file_metadata,
826
- enum_name,
827
- file_metadata,
828
- loc. line as c_uint ,
829
- bytes_to_bits ( discriminant_size) ,
830
- bytes_to_bits ( discriminant_align) ,
831
- create_DIArray ( DIB ( cx) , enumerators_metadata) ,
832
- discriminant_type_metadata)
833
- }
834
- } ;
835
-
836
- if ty:: type_is_c_like_enum ( cx. tcx , enum_type) {
837
- return discriminant_type_metadata;
838
- }
839
-
840
- let is_univariant = variants. len ( ) == 1 ;
841
-
842
- let variants_metadata = do variants. map |& vi| {
843
-
844
- let raw_types: & [ ty:: t ] = vi. args ;
845
- let arg_types = do raw_types. map |& raw_type| { ty:: subst ( cx. tcx , substs, raw_type) } ;
846
-
847
- let mut arg_llvm_types = do arg_types. map |& ty| { type_of:: type_of ( cx, ty) } ;
848
- let mut arg_names = match vi. arg_names {
849
- Some ( ref names) => do names. map |ident| { cx. sess . str_of ( * ident) . to_owned ( ) } ,
850
- None => do arg_types. map |_| { ~"" }
851
- } ;
852
-
853
- let mut arg_metadata = do arg_types. map |& ty| { type_metadata ( cx, ty, span) } ;
854
-
855
- if !is_univariant {
856
- arg_llvm_types. insert ( 0 , discriminant_llvm_type) ;
857
- arg_names. insert ( 0 , ~"") ;
858
- arg_metadata. insert ( 0 , discriminant_type_metadata) ;
859
- }
860
-
861
- let variant_llvm_type = Type :: struct_ ( arg_llvm_types, false ) ;
862
- let ( variant_type_size, variant_type_align) = size_and_align_of ( cx, variant_llvm_type) ;
863
-
864
- let variant_type_metadata = composite_type_metadata (
865
- cx,
866
- variant_llvm_type,
867
- & "" ,
868
- arg_llvm_types,
869
- arg_names,
870
- arg_metadata,
871
- span) ;
872
-
873
- do "" . as_c_str |name| {
874
- unsafe {
875
- llvm:: LLVMDIBuilderCreateMemberType (
876
- DIB ( cx) ,
877
- file_metadata,
878
- name,
879
- file_metadata,
880
- loc. line as c_uint ,
881
- bytes_to_bits ( variant_type_size) ,
882
- bytes_to_bits ( variant_type_align) ,
883
- bytes_to_bits ( 0 ) ,
884
- 0 ,
885
- variant_type_metadata)
886
- }
887
- }
888
- } ;
889
-
890
- let enum_llvm_type = type_of:: type_of ( cx, enum_type) ;
891
- let ( enum_type_size, enum_type_align) = size_and_align_of ( cx, enum_llvm_type) ;
892
-
893
- return do enum_name. as_c_str |enum_name| {
894
- unsafe {
895
- llvm:: LLVMDIBuilderCreateUnionType (
896
- DIB ( cx) ,
897
- file_metadata,
898
- enum_name,
899
- file_metadata,
900
- loc. line as c_uint ,
901
- bytes_to_bits ( enum_type_size) ,
902
- bytes_to_bits ( enum_type_align) ,
903
- 0 , // Flags
904
- create_DIArray ( DIB ( cx) , variants_metadata) ,
905
- 0 ) // RuntimeLang
906
- }
907
- } ;
908
- }
909
-
910
-
911
772
/// Creates debug information for a composite type, that is, anything that results in a LLVM struct.
912
773
///
913
774
/// Examples of Rust types to use this are: structs, tuples, boxes, vecs, and enums.
0 commit comments