Skip to content

Compiler is unable to construct an object with default and params parameters using parameterless constructor #14304

@En3Tho

Description

@En3Tho

This was noted while updating Benchmark.Net library. DisassemblyDiagnoser attribute got a new "params string[]" parameter at the end. This actually broke compilation for my F# benchmarks.

As a workaround it's enough to specify only 1 parameter value. Otherwise compiler is unable to construct an object.

Tested in Rider 2022.2.4 (fcs before F# 7) amd in Visual Studio Community Version 17.4.0 Preview 3.0 (I guess with F#7 but I can be wrong)

Repro:

type DefaultAndParams([<Optional; DefaultParameterValue(1)>]x: int, [<ParamArray>] value: string[]) =
    inherit Attribute()

type ParamsOnly([<ParamArray>] value: string[]) =
    inherit Attribute()

type DefaultOnly([<Optional; DefaultParameterValue(1)>]x: int) =
    inherit Attribute()

// The object constructor 'DefaultAndParams' takes 2 argument(s) but is here given 0. The required signature is 'new: x: int * [<ParamArray>] value: string[] -> DefaultAndParams'.
[<DefaultAndParams>]
type Q1 = struct end

[<DefaultAndParams(x = 1)>] // ok
type Q11 = struct end

[<DefaultAndParams(value = [||])>] // ok
type Q12 = struct end

[<ParamsOnly>]
type Q2 = struct end

[<DefaultOnly>]
type Q3 = struct end

Metadata

Metadata

Assignees

Labels

Area-Compiler-CheckingType checking, attributes and all aspects of logic checkingBugImpact-Medium(Internal MS Team use only) Describes an issue with moderate impact on existing code.

Type

No type
No fields configured for issues without a type.

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions