- 01 7月, 2017 1 次提交
-
-
由 vsadov 提交于
-
- 30 6月, 2017 8 次提交
-
-
由 vsadov 提交于
-
由 vsadov 提交于
-
由 vsadov 提交于
-
由 vsadov 提交于
Instead of mapping the pointer to a pointer temp, it was mapped to the managed pinned reference (which does not even have the same type). At all the places where the pointer was used, the actual reference was converted to the pointer, repeatedly. I.E. ```C# fixed(int * p = &v) { Use(p); Use(p); Use(p); } ``` was emitted as ```C# try { pinned ref int refTemp = ref v; Use((int*)refTemp); // unsafely cast pinned ref Use((int*)refTemp); // unsafely cast pinned ref Use((int*)refTemp); // unsafely cast pinned ref } finally { // zero-out refTemp } ``` instead of logical pattern matching the semantics: ```C# try { pinned ref int refTemp = ref v; int * p = (int*)refTemp; // unsafely cast pinned ref Use(p); Use(p); Use(p); } finally { // zero-out refTemp } ``` The reason for the strange emit was never truly understood. In fact, in other cases, like fixed string, the more obvious variant was used. One theory was that this codegen was just because of the lack of internal expressiveness in the old compiler around byref locals and we simply carried it forward. The inconsistency required special casing of such `fixed` statements in binding, lowering, codegen and in the semantical model, which must expose the "logical" shape of the statement. Another guess was that this kind of emit was better for JIT. That turned out to be not true. To the contrary - while a pointer temp would be very optimizable, repeated accesses to the pinned ref actually results in noticeable overhead in the JITted code, forcing users to use workarounds like: ```C# fixed(int * p = &v) { // PERF: accessing p has additional expenses, so store it in another temp; int * cheapP = p; Use(cheapP); Use(cheapP); Use(cheapP); } ``` Users should not need to do the above. Compiler should do that in the first place. Fixes: #18615
-
由 Jason Malinowski 提交于
Merge master to dev15.6
-
由 Andrew Casey 提交于
Override object.ToString in Optional<T>
-
由 Tanner Gooding 提交于
-
由 Andrew Casey 提交于
-
- 29 6月, 2017 20 次提交
-
-
由 Jared Parsons 提交于
Move remainder of Roslyn to new SDK
-
由 Tanner Gooding 提交于
-
由 Sam Harwell 提交于
Set insert_final_newline to true for C# and VB source files
-
由 Sam Harwell 提交于
Since tests are run in a subfolder of the solution, they can currently see the changes we make to .editorconfig.
-
由 Sam Harwell 提交于
-
由 Sam Harwell 提交于
-
由 Sam Harwell 提交于
-
由 Sam Harwell 提交于
-
由 CyrusNajmabadi 提交于
Introduce a more flexible service to allow languages to plug into common comment/uncomment behavior
-
由 Andrew Casey 提交于
-
由 Shyam N 提交于
Add entries for dev15.3.x branch in readme.md
-
由 Ravi Chande 提交于
Don't assume a document has SyntaxFactsService
-
由 Charles Stoner 提交于
Skip CSharpInteractive.TypingHelpDirectiveWorks test
-
由 Shyam N 提交于
-
由 Andrew Casey 提交于
-
由 Sam Harwell 提交于
Improve performance of inline rename with multi-targeting
-
由 Ravi Chande 提交于
If it doesn't, just use case sensitive matching
-
由 Charles Stoner 提交于
-
由 Sam Harwell 提交于
Use Capacity instead of Count to identify large ArrayBuilder instances
-
由 Matt Ellis 提交于
Don't fetch every PR ref for every PR job
-
- 28 6月, 2017 11 次提交
-
-
由 Jared Parsons 提交于
The runtimeconfig.json files are only necessary on CoreClr applications. The SDK by default generates it for all project types. This leads to unnecessary output in desktop projects that gets included in items like VSIX. Disable the generation to prevent this from happening.
-
由 Jared Parsons 提交于
The paths in MSBuild use a mix of `/` and `\\`. The normalization to one or the other happens very late in tool task execution. It's still very visible during execution of most tasks in our targets files. This means the comparison in BuildUtil must account for this.
-
由 Jared Parsons 提交于
-
由 Jared Parsons 提交于
-
由 Jared Parsons 提交于
The NuGetPackageToIncludeInVsix element is used to make the NuGet assets we use in a VSIX very explicit. It depended on the nuget items having the metadata element NuGetPackageId. The 1.X New SDK no longer has this piece of metadata and hence we had to pick a new approach. After some discussion decided to simply look for the assets which are coming out of the NuGet packages folders that we expect. It's essentially the same check. Needed to encode this in an MSBuild task though as the MSBuild transforms can't handle that level of complexity.
-
由 Jared Parsons 提交于
-
由 Jared Parsons 提交于
By default the new SDK will cause projecs to reference the full transitive closure of project references, not just the direct references. This is fine in most cases but caused breaks in our VSIX projects. Our VSIX projects often reference project with specific extra metadata to control whether or not their contents are included in the final VSIX. That extra metadata is not applied to projects which are implicitly referenced by the new SDK. That caused our VSIX to bloat in size and have functionally incorrect contents. Fixed this by disabling implicit transitive references for our VSIX projects. https://github.com/dotnet/sdk/issues/1366
-
由 Jared Parsons 提交于
-
由 Jared Parsons 提交于
The warning B40057 used to be suppressed at a global level in PCL / Desktop projects. The SDK does not suppress this warning and hence converting to the new SDK caused this to show up. Previously a number of developers fixed this problem individually. The correct solution is to suppress it globally as was done previously.
-
由 Jared Parsons 提交于
Migrated the remainder of our code base to use the new SDK via the ConvertPackageRef tool. https://github.com/jaredpar/ConvertPackageRef
-