[LibraryImport] Naming `string` parameter `retVal` in import with `string` return value results in `CS0128`

Open
#115,608 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
65/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Quiet
Tech stack
csharp
Domain
tooling

Research direction

Start by tracing the LibraryImport generator's handling of string return-value and parameter buffers using the C# reproduction in the issue. Check how local names are derived for the return value and parameters, then verify that the retVal example no longer produces CS0128 and that existing generated interop cases remain valid.

Written by the indexing model from the issue text.

Description

area-Interop-coreclr
Description

The LibraryImport generator uses byte* __retVal_native as the name for the local return value buffer variable. It uses byte* __parameterName_native as the name for the local input buffer variable. If the parameter is named retVal, this results in two locals named __retVal_native.

This can potentially be solved by simply using __retVal_native for the return value local variable and __p_retVal_native for parameter local variables.

Reproduction Steps
partial class C
{
    [LibraryImport("_", StringMarshalling = StringMarshalling.Utf8)]
    private static partial string M(string retVal);
}
Expected behavior

The generator does not use the same local variable names for both parameters and return values.

Actual behavior

It does.

Regression?

No response

Known Workarounds

Don't name the parameter retVal.

Configuration

10.0.100-preview.4.25258.110

Other information

No response

Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/runtime

All issues in dotnet/runtime

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.