Example #1
0
        public void OperandsAreAccessibleTest( )
        {
            const int CompositeTypeOperandCount = 9;
            var       targetMachine             = TargetTests.GetTargetMachine( );

            using var ctx    = new Context( );
            using var module = ctx.CreateBitcodeModule("test.bc", SourceLanguage.C99, "test.c", "unit-tests");
            module.Layout    = targetMachine.TargetData;
            var intType   = new DebugBasicType(module.Context.Int32Type, module, "int", DiTypeKind.Signed);
            var arrayType = new DebugArrayType(intType, module, 3u);

            Assert.IsNotNull(arrayType);

            DICompositeType?mdnode = arrayType.DIType;

            Assert.IsNotNull(mdnode);
            Assert.IsNotNull(mdnode !.Operands);
            Assert.AreEqual(CompositeTypeOperandCount, mdnode.Operands.Count);

            Assert.IsNull(mdnode.File);
            Assert.IsNull(mdnode.Operands[0]);

            Assert.IsNull(mdnode.Scope);
            Assert.IsNull(mdnode.Operands[1]);

            Assert.IsTrue(string.IsNullOrEmpty(mdnode.Name));
            Assert.IsNull(mdnode.Operands[2]);

            Assert.IsNotNull(mdnode.BaseType);
            Assert.IsNotNull(mdnode.Operands[3]);

            Assert.IsNotNull(mdnode.Elements);
            Assert.IsNotNull(mdnode.Operands[4]);
            Assert.AreEqual(1, mdnode.Elements.Count);
            Assert.AreEqual(1, mdnode.Elements.Count);
            var subRange = mdnode.Elements[0] as DISubRange;

            Assert.IsNotNull(subRange);

            /* TODO: Test non-operand properties when available
             * // Assert.AreEqual( 0, subRange.LowerBound );
             * // Assert.AreEqual( 3, subRange.Length );
             */

            Assert.IsNull(mdnode.VTableHolder);
            Assert.IsNull(mdnode.Operands[5]);

            Assert.IsNull(mdnode.TemplateParameters);
            Assert.IsNull(mdnode.Operands[6]);

            Assert.IsTrue(string.IsNullOrEmpty(mdnode.Identifier));
            Assert.IsNull(mdnode.Operands[7]);

            Assert.IsNull(mdnode.Discriminator);
            Assert.IsNull(mdnode.Operands[8]);

            Assert.AreSame(intType.DIType, mdnode.BaseType);
        }
Example #2
0
        public void CreateFunctionTypeTest( )
        {
            var targetMachine = TargetTests.GetTargetMachine( );

            using var context = new Context( );
            var module = context.CreateBitcodeModule("test.bc", SourceLanguage.C99, "test.c", "unit-tests");

            Assert.IsNotNull(module);
            module.Layout = targetMachine.TargetData;

            var i16 = new DebugBasicType(context.Int16Type, module, "int16", DiTypeKind.Signed);
            var i32 = new DebugBasicType(context.Int32Type, module, "int32", DiTypeKind.Signed);
            var f32 = new DebugBasicType(context.FloatType, module, "float", DiTypeKind.Float);

            // i16 ( i32, float )
            var funcSig = context.CreateFunctionType(module.DIBuilder, i16, i32, f32);

            Assert.IsNotNull(funcSig);
            Assert.AreSame(context, funcSig.Context);

            Assert.AreEqual(TypeKind.Function, funcSig.Kind);
            Assert.AreSame(context.Int16Type, funcSig.ReturnType);
            Assert.AreEqual(2, funcSig.ParameterTypes.Count);

            // verify additional properties created properly
            Assert.AreEqual(0U, funcSig.IntegerBitWidth);
            Assert.IsFalse(funcSig.IsDouble);
            Assert.IsFalse(funcSig.IsFloat);
            Assert.IsFalse(funcSig.IsFloatingPoint);
            Assert.IsFalse(funcSig.IsInteger);
            Assert.IsFalse(funcSig.IsPointer);
            Assert.IsFalse(funcSig.IsPointerPointer);
            Assert.IsFalse(funcSig.IsSequence);
            Assert.IsFalse(funcSig.IsSized);
            Assert.IsFalse(funcSig.IsStruct);
            Assert.IsFalse(funcSig.IsVarArg);
            Assert.IsFalse(funcSig.IsVoid);

            Assert.IsNotNull(funcSig.DIType);
            DISubroutineType subroutineType = funcSig.DIType !;

            Assert.IsNotNull(subroutineType);
            Assert.AreSame(context, subroutineType.Context);
            Assert.AreEqual(DebugInfoFlags.None, subroutineType.DebugInfoFlags);

            // signatures, have no scope or file
            Assert.IsNull(subroutineType.Scope);
            Assert.IsNull(subroutineType.File);
        }
Example #3
0
        public void VerifyCreateFunctionTypeWithSameSigIsSameInstanceTest( )
        {
            var targetMachine = TargetTests.GetTargetMachine( );

            using var context = new Context( );
            var module = context.CreateBitcodeModule("test.bc", SourceLanguage.C99, "test.cs", "unit-tests");

            Assert.IsNotNull(module);
            module.Layout = targetMachine.TargetData;

            var i16 = new DebugBasicType(context.Int16Type, module, "int16", DiTypeKind.Signed);
            var i32 = new DebugBasicType(context.Int32Type, module, "int32", DiTypeKind.Signed);
            var f32 = new DebugBasicType(context.FloatType, module, "float", DiTypeKind.Float);

            // i16 ( i32, float )
            var funcSig  = context.CreateFunctionType(module.DIBuilder, i16, i32, f32);
            var funcSig2 = context.CreateFunctionType(module.DIBuilder, i16, i32, f32);

            Assert.AreSame(funcSig.NativeType, funcSig2.NativeType);
            Assert.AreSame(funcSig.DIType, funcSig2.DIType);
        }