Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disable generic math due to C++/CLI incompatibilities #55540

Merged
1 commit merged into from
Jul 14, 2021

Conversation

tannergooding
Copy link
Member

This disables generic math as its not currently supported by C++/CLI and may cause error C2253 (with a message similar to 'System::INumber::DivRem': pure specifier or abstract override specifier only allowed on virtual function) for an imported type that implements an interface with static virtuals.

This is somewhat similar to what happens for C++/CLI when encountering Span<T> (or ref structs in general), in, and other "new" language or runtime features. However, since this directly impacts the "core" types (e.g. int32, int64, intptr, etc) it is much more prevalent and will likely be encountered by all existing C++/CLI codebases.

@tannergooding tannergooding added the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jul 12, 2021
@dotnet-issue-labeler
Copy link

I couldn't figure out the best area label to add to this PR. If you have write-permissions please help me learn by adding exactly one area label.

@tannergooding
Copy link
Member Author

CC. @danmoseley, @jeffhandley

This is a draft PR so it can pass all normal CI validation and will be ready to merge before the snap tomorrow if its determined to be necessary.

dotnet/wpf#4823 has some more details

Copy link
Member

@stephentoub stephentoub left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😦

Copy link
Member

@jeffhandley jeffhandley left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Thanks for getting this ready in case we need it.
  2. I'm actually excited to get to test our ability to turn this off. 😄
  3. What is the best way to verify that all traces are removed?

@jkotas
Copy link
Member

jkotas commented Jul 13, 2021

Have we looked for other potential places where the generic may cause problems? For example, debuggers and profilers?

@tannergooding
Copy link
Member Author

For example, debuggers and profilers?

For debugging at least, I didn't encounter any issues when implementing the feature (either product or test code). I didn't attempt any profiling.

I would suspect that, as with any new IL sequence (including things like Default Interface Methods) there may be external tooling updates required for the new feature.

@tannergooding
Copy link
Member Author

I'm actually excited to get to test our ability to turn this off. 😄
What is the best way to verify that all traces are removed?

I had already done some testing locally before the feature was ever merged. Namely just using a version of Roslyn that didn't support static abstracts in interfaces and ensuring everything compiled.
I don't think there is a good way to test this otherwise short of manually examining the IL to ensure it looks as expected.

@tannergooding tannergooding removed the NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) label Jul 13, 2021
@tannergooding tannergooding marked this pull request as ready for review July 13, 2021 17:03
@tannergooding
Copy link
Member Author

Marking as auto-merge. Due to this impacting essentially any C++/CLI compilation this has to be merged so that C++/CLI is usable from .NET 6.

We will be working with the C++/CLI team to get an appropriate fix in place.

@ghost
Copy link

ghost commented Jul 13, 2021

Hello @tannergooding!

Because this pull request has the auto-merge label, I will be glad to assist with helping to merge this pull request once all check-in policies pass.

p.s. you can customize the way I help with merging this pull request, such as holding this pull request until a specific person approves. Simply @mention me (@msftbot) and give me an instruction to get started! Learn more here.

@danmoseley
Copy link
Member

We maybe should have a test hello world C++/CLI project in dotnet/runtime tests.

@tannergooding
Copy link
Member Author

Do we currently have the infrastructure in place to build C++/CLI projects?

I imagine that we'll need quite a bit of special infrastructure/msbuild logic for a vcxproj to reference the locally built System.Runtime dependencies and account for other target/props differences.

@ViktorHofer?

@dreddy-work
Copy link
Member

@tannergooding, Is anything blocking execution of tests? tests are taking forever and i see some tests failed.

@jkotas
Copy link
Member

jkotas commented Jul 13, 2021

We maybe should have a test hello world C++/CLI project in dotnet/runtime tests.

Does hello world C++/CLI hit this problem?

We have number of C++/CLI tests under https://github.com/dotnet/runtime/blob/main/src/tests/Interop/IJW/ . Is the problem that these tests are not getting compiled against current references?

@tannergooding
Copy link
Member Author

Does hello world C++/CLI hit this problem?

At the very least, it appears as though using any of the non-primitives that implement generic-math (including IntPtr) causes the problem. Its unclear under what conditions using the language primitives (such as Int32) also causes issues.

I'm working on getting a nightly SDK installed so I can do more analysis locally.

@tannergooding
Copy link
Member Author

tannergooding commented Jul 13, 2021

Is anything blocking execution of tests? tests are taking forever and i see some tests failed.

The staging leg can take some time to complete. The last iteration timed out and so it was requeued and has been running for ~50m

Edit Actually it hasn't properly started yet. It is 194 back in the queue. Presumably due to the CI issues that have occurred over the past few days causing a general "traffic jam" as everyone is requeuing jobs.

@tannergooding
Copy link
Member Author

tannergooding commented Jul 13, 2021

@jkotas, use of any non-primitive type that implements an interface containing a static abstract method causes a failure (e.g. IntPtr, Guid, DateTime, TimeSpan, etc).
Likewise, attempting to use any member on a primitive type (say Int32.ToString) will cause the same set of failures.
Attempting to just use a primitive type (e.g. int main(array<System::String^>^ args)) does not result in a failure.

The "simplest" repro for a failure is to install the latest .NET SDK nightly from dotnet/installer and then attempt to build the following in C++/CLI:

using namespace System;

int main(array<System::String^>^ args)
{
  return Int32::Parse(args[0]);
}

Which results in the below. Ultimately it looks like the C++/CLI compiler attempts to validate every member of the type matches its expectations, even if the APIs in question are never used or consumed.

Severity	Code	Description	Project	File	Line	Suppression State
Error	C2803	'operator &' must have at least one formal parameter of class type	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2803	'operator ^' must have at least one formal parameter of class type	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2803	'operator |' must have at least one formal parameter of class type	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2803	'operator ~' must have at least one formal parameter of class type	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IAdditionOperators::operator +': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IAdditionOperators<TSelf,TSelf,TSelf>::operator +': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IAdditiveIdentity::AdditiveIdentity::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IAdditiveIdentity<TSelf,TSelf>::AdditiveIdentity::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryInteger::LeadingZeroCount': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryInteger::PopCount': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryInteger::RotateLeft': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryInteger::RotateRight': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryInteger::TrailingZeroCount': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryNumber::IsPow2': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryNumber::Log2': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryNumber<TSelf>::IsPow2': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBinaryNumber<TSelf>::Log2': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators::operator &': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators::operator ^': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators::operator |': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators::operator ~': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<int,int,int>::operator &': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<int,int,int>::operator ^': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<int,int,int>::operator |': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<int,int,int>::operator ~': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<TSelf,TSelf,TSelf>::operator &': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<TSelf,TSelf,TSelf>::operator ^': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<TSelf,TSelf,TSelf>::operator |': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IBitwiseOperators<TSelf,TSelf,TSelf>::operator ~': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators::operator <': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators::operator <=': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators::operator >': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators::operator >=': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators<TSelf,TSelf>::operator <': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators<TSelf,TSelf>::operator <=': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators<TSelf,TSelf>::operator >': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IComparisonOperators<TSelf,TSelf>::operator >=': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IDecrementOperators::operator --': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IDecrementOperators<TSelf>::operator --': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IDivisionOperators::operator /': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IDivisionOperators<TSelf,TSelf,TSelf>::operator /': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IEqualityOperators::operator !=': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IEqualityOperators::operator ==': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IEqualityOperators<TSelf,TOther>::operator !=': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IEqualityOperators<TSelf,TOther>::operator ==': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IEqualityOperators<TSelf,TSelf>::operator !=': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IEqualityOperators<TSelf,TSelf>::operator ==': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IIncrementOperators::operator ++': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IIncrementOperators<TSelf>::operator ++': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IModulusOperators::operator %': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IModulusOperators<TSelf,TSelf,TSelf>::operator %': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IMultiplicativeIdentity::MultiplicativeIdentity::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IMultiplicativeIdentity<TSelf,TSelf>::MultiplicativeIdentity::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IMultiplyOperators::operator *': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IMultiplyOperators<TSelf,TSelf,TSelf>::operator *': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Abs': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Clamp': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Create': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::CreateSaturating': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::CreateTruncating': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::DivRem': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Max': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Min': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::One::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Parse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Sign': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::TryCreate': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::TryParse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber::Zero::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Abs': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Clamp': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Create': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::CreateSaturating': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::CreateTruncating': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::DivRem': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Max': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Min': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::One::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Parse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Sign': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::TryCreate': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::TryParse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::INumber<TSelf>::Zero::get': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IParseable::Parse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IParseable::TryParse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IParseable<TSelf>::Parse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IParseable<TSelf>::TryParse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IShiftOperators::operator <<': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IShiftOperators::operator >>': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IShiftOperators<TSelf,TSelf>::operator <<': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IShiftOperators<TSelf,TSelf>::operator >>': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::ISpanParseable::Parse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::ISpanParseable::TryParse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::ISpanParseable<TSelf>::Parse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::ISpanParseable<TSelf>::TryParse': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::ISubtractionOperators::operator -': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::ISubtractionOperators<TSelf,TSelf,TSelf>::operator -': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IUnaryNegationOperators::operator -': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IUnaryNegationOperators<TSelf,TSelf>::operator -': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IUnaryPlusOperators::operator +': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C2253	'System::IUnaryPlusOperators<TSelf,TSelf>::operator +': pure specifier or abstract override specifier only allowed on virtual function	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	
Error	C1003	error count exceeds 100; stopping compilation	HelloWorldCppCLI	C:\Users\tagoo\Source\repos\HelloWorldCppCLI\HelloWorldCppCLI\main.cpp	5	

@RussKie
Copy link
Member

RussKie commented Jul 13, 2021

Have we looked for other potential places where the generic may cause problems? For example, debuggers and profilers?

You can add "compiling WPF" to the test suit whenever C++ gets changed.

@jkoritzinsky
Copy link
Member

@jkotas the IJW tests build as part of the native test build, so they don't build against the live ref pack. We'd have to do significant build refactoring to enable them to build against the live ref pack in CI. Local builds are easier, so we could enable it for local builds as an opt-in option since it's only needed for cross-cutting features that happen once a release.

@ghost ghost merged commit f6eb259 into dotnet:main Jul 14, 2021
thaystg added a commit to thaystg/runtime that referenced this pull request Jul 14, 2021
…debugger_custom_views

* 'main' of github.com:thaystg/runtime: (125 commits)
  [wasm] [debugger] Support method calls  (dotnet#55458)
  [debugger] Fix debugging after hot reloading (dotnet#55599)
  Inliner: Extend IL limit for profiled call-sites, allow inlining for switches. (dotnet#55478)
  DiagnosticSourceEventSource supports base class properties (dotnet#55613)
  [mono] Fix race during mono_image_storage_open (dotnet#55201)
  [mono] Add wrapper info for native func wrappers. (dotnet#55602)
  H/3 and Quic AppContext switch (dotnet#55332)
  Compression.ZipFile support for Unix Permissions (dotnet#55531)
  [mono] Fix skipping of static methods during IMT table construction. (dotnet#55610)
  Combine System.Private.Xml TrimmingTests projects (dotnet#55606)
  fix name conflict with Configuration class (dotnet#55597)
  Finish migrating RSAOpenSsl from RSA* to EVP_PKEY*
  Disable generic math (dotnet#55540)
  Obsolete CryptoConfig.EncodeOID (dotnet#55592)
  Address System.Net.Http.WinHttpHandler's nullable warnings targeting .NETCoreApp (dotnet#54995)
  Enable Http2_MultipleConnectionsEnabled_ConnectionLimitNotReached_ConcurrentRequestsSuccessfullyHandled (dotnet#55572)
  Fix Task.WhenAny failure mode when passed ICollection of zero tasks (dotnet#55580)
  Consume DistributedContextPropagator in DiagnosticsHandler (dotnet#55392)
  Add property ordering feature (dotnet#55586)
  Reduce subtest count in Reflection (dotnet#55537)
  ...
@ghost ghost locked as resolved and limited conversation to collaborators Aug 13, 2021
This pull request was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants