chapel-lang / chapel

a Productive Parallel Programming Language
https://chapel-lang.org
Other
1.76k stars 414 forks source link

should it be clearer when a class/record is generic? #19120

Closed mppf closed 3 months ago

mppf commented 2 years ago

Related to #18665 and #16508.

Also related to a common error in declaring recursive class types (in details)

I think there have been issues about that but I haven't found a link to one yet. Coming from something like C++ it is common to write code like this: ``` chapel class IntListNode { var value: int; var next: IntListNode; } ``` which is probably error because now IntListNode is generic. (It is generic because just `IntListNode` means the class with generic/unknown management).

The question posed by this issue is - should it be clearer when a class/record is generic?

Today we have a problem that whether or not a class/record is generic depends upon how the field types are resolved. I don't think this makes sense.

In https://chapel-lang.org/docs/main/language/spec/generics.html#generic-classes-and-records , the spec says a generic field is:

  • a specified or unspecified type alias,
  • a parameter field, or
  • a var or const field that has no type and no initialization expression.

Notably absent from this is "a var or const field that is declared with a generic type" even though it is how the compiler is behaving today. The fact that it behaves this way is due to my PR #9489 where I thought I was increasing generality of a feature in an obvious manner. However now I think that was not a good idea.

In particular, for the compiler today, the record A is generic in the below:

record GR { type t; var field: t; }

record A {
  var field: GR;
}

However one has to look at / study the definition of GR in order to know that A is generic. It can be worse than that, because we allow type functions, the type of field could be computed by a type function. So, in other words, it is not clear from the record A declaration itself whether the programmer intended to create a generic record.

I think it is nice that writing generic code in Chapel is easy and Python-like. However, for a type declarations specifically, it makes a big difference to how the type is used whether or not it is generic. In particular, the generic fields form part of the API for the type since they are used in type construction (e.g. A(int) is a type construction call). So, I think that:

Beyond the question about whether the current situation is good enough at communicating programmer intent, quite a bit of the compiler code behaves differently depending on whether a type is generic or not, and it would definitely make the compiler easier to implement if this property was obvious from the syntax.

Speaking of compiler bugs, here is a more difficult example. As long as the generic-ness of a type depends on the field types, it can only be computed during resolution, but that presents some challenge when the type is recursive. This example has surprising behavior today, in that the type seems to be both concrete (according to warnings) and generic (according to a later compilation error). Is the challenge in implementing the behavior correctly an indication that programs using this feature can be difficult to understand?

``` chapel record GR { type t=int; var field: t; } proc computeTypeY(type xType, type rType) type { compilerWarning("In computeTypeY, rType=" + rType:string + " isGenericType(rType)=" + isGenericType(rType):string, " isGenericType(R)=" + isGenericType(R):string); return unmanaged C?; } proc computeTypeZ(type yType, type rType) type { compilerWarning("In computeTypeZ, rType=" + rType:string + " isGenericType(rType)=" + isGenericType(rType):string, " isGenericType(R)=" + isGenericType(R):string); return GR; } class C { var field: R; } record R { var x: unmanaged C?; var y: computeTypeY(x.type, R); var z: computeTypeZ(y.type, R); } compilerWarning("At top level, isGenericType(R)=" + isGenericType(R):string); var x:R; ``` ``` ee.chpl:1: In module 'ee': ee.chpl:24: warning: In computeTypeY, rType=R isGenericType(rType)=false isGenericType(R)=false ee.chpl:25: warning: In computeTypeZ, rType=R isGenericType(rType)=false isGenericType(R)=false ee.chpl:28: warning: At top level, isGenericType(R)=false ee.chpl:24: warning: In computeTypeY, rType=R isGenericType(rType)=false isGenericType(R)=false ee.chpl:25: warning: In computeTypeZ, rType=R isGenericType(rType)=false isGenericType(R)=false ee.chpl:25: error: Cannot default-initialize a variable with generic type ee.chpl:25: note: 'z' has generic type 'GR' ``` How can `R` be not generic but have a generic field `z`?

What could we do about this?

Approach 0

Don't change the compiler/language, and maybe ask people not to write code where this is confusing. Note that if we current approach, we need to update the language specification in https://chapel-lang.org/docs/language/spec/generics.html#generic-classes-and-records , which does not consider a field like var x: integral to make a class/record generic.

Approach 1

Building on the proposal in #18665, a user wishing to make a field generic can do so with the ? syntax.

So in the original example, we could write

record GR { type t; var field: t; }

record A {
  var field: GR(?);
}

If we wanted to, we could go further and also require one write proc f(arg: GR(?)) instead of proc f(arg: GR). Which would help to make it clearer from function declarations themselves whether or not they are generic functions. This is discussed in issue #19121.

Note that since, for a concrete class C, just writing C is a generic type, we would have to decide what happens in a case like this:

record B {
  var field: C;
}

which is declaring a record with generic management, today.

We could require one write

record B {
  var field: C(?);
}

for a concrete class C. But, if C is generic-with-defaults, that would change the meaning of record B because now it can accept non-default instantiations of C as well as any management. Perhaps (C)(?) could mean to keep the default instantiation of C but allow any management.

Approach 2

We could undo the change in PR #9489 and move instead to requiring no type specification (e.g. var field;) or separate type fields, which is the situation described in the spec and the situation before that PR.

Approach 3

We could require ?t syntax to make it clearer in this case. To combine that with saying the type is a subtype, we would use a where clause.

record GR { type t; var field: t; }

record A {
  var field: ?t where t: GR;
}

Approach 4

We could require some sort of decoration on all generic records, e.g.

record GR(?) { type t; var field: t; }

record A(?) {
  var field:GR;
}

or even switching to a C++ style of separately identifying the type/param variables

record GR(type t) { var field: t; }

record A(type t:GR) {
  var field:t;
}

IMO this is too big of a change but I am including it for completeness. In particular, I do not think Chapel users have trouble understanding record R{ var x; } or record R{ type t; } or record R{ param p; } are generic - but this proposal would change those. The 2nd form which is more like C++ would also change how type construction interacts with initializers (we could no longer compute the type to be constructed in the init method).

Approach 5

We could require type or param variables in order for a record to be generic and deprecate fields like var x; or var y: integral. The advantage of this approach is that it makes generic handling more consistent and makes identifying a generic class/record easier. Additionally, this approach resolves an open design question about how to write a custom default-initializer for such types. For more information about this open design question, see:

mppf commented 2 years ago

TODO: see what test failures look like with Approach 1.

aconsroe-hpe commented 2 years ago

We discussed this briefly offline today and I expressed my 2c reaction to this which is I don't find the current state to be too confusing. In the steady state, you'd expect the author to know that GR is generic because they had to concretize it in their init. For new programmers or new programs, I could see this potentially being a head scratcher (especially generic over management types since that is fairly Chapel specific) but the cost/benefit here doesn't sway me away from how things are.

skaller commented 2 years ago

You have to get rid of this. If you want a polymorphic record you can do it like this:

record GR [t] { var field: t; }

record A {
  var field: GR[int];
}

record B[t] {
  var field: GR[t];
}

The [t] is a universal quantifier. It must be instantiated on all uses. It is an error not to do so in all cases. End of confusion. You cannot put type t; inside the record, that's nonsense. That would actually be the syntax for an existential type (and in fact is in Ocaml). You can change the exact syntax, but you cannot put the quantifier inside the thing which is quantified.

In some cases, the quantifiers can be deduced and the [t] omitted: this occurs with overload resolution. For example for a function

proc f[t] (x:t) ....
f(1) // t = int is deduced so the [int] is not required

The general algebraic principle here is that types MUST use the same form as logic. This is due to the Curry Howard Isomorphism. In first order type systems (corresponding to first order logic), you have universal quantification and it MUST be at the head. This is called head-normal form. If you have nested quantifiers that's second order polymorphism and way beyond the scope of the current Chapel design. Existentials are also possible but tricky: in constructive logic, you cannot just have an existential quantifier you have to actually produce a witness.

At least in this sense the C++ syntax is correct: template<typename T> .... correctly announces the universally quantified variable at the head.

mppf commented 2 years ago

@skaller I'm pretty confident we're not going to do that and we happen to like the language we've created. Telling us that it's nonsense/rubbish/crap or that some other way is the only way is not going to make friends or influence people.

But responding more directly to "Why not use something like C++ syntax?" - what we have today in terms of something being generic based on the inside of the declaration is intuitive to many, especially to programmers coming from Python. And, it significantly lowers the syntactical & conceptual overhead of writing generic code. (Perhaps too much, but that is the subject of this issue).

I understand and am aware that it is not the syntax that PL theory would suggest.

skaller commented 2 years ago

I don't buy the easier to learn argument at all. I have 30 years experience designing programming languages. It took me a week to read the Chapel documentation. By contrast, I learned go-lang from a single rather long tutorial video.

Furthermore, not even devotees of the language understand it, including Brad. Of course, C++ is even more complex, and I doubt anyone actually understands all of it.

Syntax is not arbitrary. There are rules. It has to reflect the underlying algebra or it will be hard to understand what your code does. The algebra has to be coherent (without special cases or conflicts) or it will be impossible to compose components. And the type system must allow you to type check every definition and every use thereof. Which you cannot do at the moment.

So you may like what you have but then why are these issues arising? It doesn't matter what you like. What matters is that you have a coherent type system, which includes polymorphism, and you have syntax that reflects the structure of the type system, otherwise uses will not understand the typing rules, and developers will not be able to generalise.

You can argue that some of the syntax is OK, and some could use some work, and similarly many other issues. It's always a challenge to find a relatively painless way to migrate. After a decade on the C++ committee, I have learned a bit about compatibility with older code (in fact in C++, with C). But I also learned that sometimes you have to break things, or you cannot make progress. And C++ is a great example of a complete failure. Compile times are horrible, errors incomprehensible, and all because templates, the mainstay of modern C++ library development, cannot be type checked.

I took me a while to learn Ocaml. ML is quite different to C++. The functional programming bit was no problem, but the function call syntax really threw me:

sin x

with no () around the x. So I surely do understand about the familiarity thing but in the end i got used to the Ocaml syntax, and now, the lack of unnecessary parens is a real blessing. And you can write sin(x) if you want anyhow, it's still correct.

There's a difference between C++ and Chapel. C++ users are average programmers or unfortunate students. Chapel targets expert audiences. They may not be expert in PLs, but they all have solid mathematical backgrounds or they would not be interested in high performance distributed concurrent processing. Which means, your audience will accept breakages if it leads to better performance, and not just run time performance, but a more expressive language with better support for reusable components.

IMHO of course.

mppf commented 2 years ago

A note for anyone following this issue - I've edited the OP to add two more possible approaches to solve this problem.

dlongnecke-cray commented 2 years ago

Aside: Your second detailed example really bothers me, I don't understand why R is not considered partially generic when evaluating computeTypeZ (oh and computeTypeY too, huh?). But maybe the point of that example is that it probably should and it might be a bug?

vasslitvinov commented 2 years ago

I appreciate the problem of reading record R { var x: D; } and not knowing whether I should write var r: R; or var r: R(D(int));

I would like to generalize this problem, however. Consider:

record R {
  ... hundreds of lines of code ...
  type xyz;
  ... more code ...
  type pqr;
  ... more code ...
}

Again, I will not know whether my concrete type should be R, R(int), or R(int,real) -- just because I am not seeing those type fields in the code. The answer is either (a) go read chpldoc or (b) react to compilation errors when I do not get it right the first time, with the compiler pointing me to type xyz and type pqr in the code. These two answers apply equally to the unknown genericity of a record's field.

vasslitvinov commented 2 years ago

Regarding complications arising with recursive types: one option is what we do for the return type of a recursive function. Namely, we require that it be specified.

Applying that here, have the compiler require the genericity of certain fields to be indicated (using (?) or some other syntax) in the cases where it cannot figure it out on its own.

This addresses my major concern with Approach 1 and similar that they present a maintenance burden. If the requirement applies only in certain corner cases, the maintenance burden is minor.

mppf commented 2 years ago

Applying that here, have the compiler require the genericity of certain fields to be indicated (using (?) or some other syntax) in the cases where it cannot figure it out on its own.

AFAIK the compiler can always figure it out. The question is just—if the compiler has to work hard to do so—will a user also have to work hard to do so?

Anyway I am currently expecting that we won't change the language design here but perhaps this issue will motivate us to be more careful about distinguishing generic vs concrete in error messages.

bradcray commented 2 years ago

one option is what we do for the return type of a recursive function. Namely, we require that it be specified.

A bit off-topic, but the current behavior for recursive functions isn't very popular for users (nor for me, when I'm writing code from a user perspective). Specifically, there are plenty of recursive functions (maybe all?) where the compiler should be able to figure the return type out. As a simple example:

proc fact(n: int) {
  if n == 0 then
    return 1;
  else
    return n* fact(n-1);
}

I imagine that the compiler would start by looking at all the non-recursive return expressions and say "this seems to return int" as with a non-recursive case. Then, it can plug that guess into the recursive cases to see whether it unifies properly (e.g., n * int is int so the recursive branch also returns int—great!). If not, it issues an error.

mppf commented 1 year ago

I've added an Approach 5 to the top post of this issue. My current preference is to use Approach 5 if we are willing to make any change in this area at all.

mppf commented 1 year ago

One drawback to Approach 5 is that it makes certain patterns less easy to express. That's obvious in a way, because you have to write fields like type eltType; var element: eltType; instead of just var element;. But, it also impacts the compiler-generated initializer.

However, I don't find this drawback to be particularly concerning.

lydia-duncan commented 1 year ago

Approach 5 seems like it's addressing a different problem than the other solutions, did you mean to put it on a different issue?

mppf commented 1 year ago

Approach 5 seems like it's addressing a different problem than the other solutions, did you mean to put it on a different issue?

I meant for it to be on this issue. In fact it is like Approach 2 but also deprecates generic fields like var x;.

It solves the problem of "It's too hard for the compiler/programmer to see if a field is generic" because you can simply look at the fields to see if any are declared with type or param. No longer could you make a generic record using only var or const fields. If there are any type or param fields, it is generic. (If we went with the proposal in #21075, it would be "if there are any type or param fields that do not have initialization expressions, then the class/record is generic").

lydia-duncan commented 1 year ago

So if the compiler detects that the type you are using for a field is generic, will it force you to make a type field for it? E.g.

record Foo {
  var x: MyGenericType;
}

will result in an error and the correct way to write it is:

record Foo {
  type t = MyGenericType;
  var x: t;
}

?

mppf commented 1 year ago

So if the compiler detects that the type you are using for a field is generic, will it force you to make a type field for it? E.g.

record Foo {
  var x: MyGenericType;
}

will result in an error

Yes, that is right, so far

and the correct way to write it is:

record Foo {
  type t = MyGenericType;
  var x: t;
}

That is not the correct way to write it. Today, the field type t = MyGenericType makes t be generic with a default of MyGenericType rather than a constraint on t (see also #21075 which discusses changing that). To make a constraint on t today, you would write initializers that check that t is a subtype of MyGenericType. (I think it would be interesting to consider other ways of doing that in the context of custom type constructors but I don't think we need that to make the change here). For example:

record Foo {
  type t;
  var x: t;
  proc init(type t) {
    if !isSubtype(t, MyGenericType) then
       compilerError("Foo must be instantiated with a subtype of MyGenericType");
  }
}
lydia-duncan commented 1 year ago

So for clients of Foo to know that x should be an instantiation of MyGenericType, would we be relying more strongly on the documentation for x? That seems like placing an additional burden on record authors in multiple ways:

mppf commented 1 year ago

I don't view it as an additional burden because a number of things don't really work intuitively if you don't use type/param fields and instead rely on things like var x; -- as a result I recommend the explicit type/param fields style for anyone who listens.

One specific situation. For fields of class type we have observed several cases where a user was creating a generic record/class when they did not intend to & then they were confused by the resulting error messages (which generally don't point to the problematic field). By requiring that to be slightly more explicit, I think we are making it less confusing for people who run into that issue.

Regarding the "Generic field with a constraint" pattern, I suspect that is not used very much in practice, outside of our own tests of it, but that is something we can gather more information on.

they have to add additional documentation to the original field, when before it would have been generated for them

Just about the documentation, having the type / param field rule would allow the documentation to automatically clearly indicate when a record/class is generic. In the current situation, the user is responsible for doing that. I do not think that simply showing var field: SomeType will convey to a documentation reader that SomeType is or is not generic. So, it is my view that the type / param rule would improve documentation because it will be clearer when records/classes are generic.

mppf commented 1 year ago

Edit: With an improved warning for Approach 2, I'm seeing 823 failures out of 13465 (where any time the warning is emitted leads to a test failure, since I haven't updated any tests yet).

Branch is https://github.com/mppf/chapel/tree/warn-field-with-generic-declared-type

commit 0a4f8eb3dc6c8ccc303a47c57589534f8bb5bcb6 ``` [[Error matching program output for arrays/bradc/enumIterate] [Error matching compiler output for arrays/compilerErrors/opCount-assoc] [Error matching program output for arrays/deitz/domains/test_domain_arg2] [Error matching program output for arrays/deitz/domains/test_domain_arg3] [Error matching program output for arrays/deitz/part4/test_array_of_associative_arrays] [Error matching program output for arrays/deitz/part4/test_array_of_associative_domains] [Error matching program output for arrays/deitz/part5/test_assoc_of_arith] [Error matching program output for arrays/diten/enumArrayMethods] [Error matching program output for arrays/diten/nestSortedIter] [Error matching compiler output for arrays/errors/initRectArrFromAssocDom] [Error matching compiler output for arrays/errors/nilStorageNonNilAssocArr (compopts: 1)] [Error matching compiler output for arrays/errors/nilStorageNonNilAssocArr (compopts: 2)] [Error matching compiler output for arrays/errors/nilStorageNonNilAssocArr (compopts: 3)] [Error matching program output for arrays/ferguson/array-initialization-patterns/array-init-replicated] [Error matching program output for arrays/ferguson/array-initialization-patterns/array-initialization-patterns-dists (compopts: 6)] [Error matching program output for arrays/ferguson/array-initialization-patterns/array-initialization-patterns] [Error matching program output for arrays/ferguson/array-initialization-patterns/init-associative] [Error matching program output for arrays/ferguson/assoc-contain-rect] [Error matching program output for arrays/ferguson/enumerated-array (compopts: 1)] [Error matching program output for arrays/ferguson/enumerated-array (compopts: 2)] [Error matching compiler output for arrays/johnk/associative/badKeyType] [Error matching compiler output for arrays/johnk/associative/badValType] [Error matching program output for arrays/johnk/associative/keyValTypes] [Error matching program output for arrays/johnk/associative/literals] [Error matching program output for arrays/johnk/associative/tooFewKeys] [Error matching program output for arrays/johnk/associative/tooManyKeys] [Error matching program output for arrays/johnk/associative/wrongKeys] [Error matching program output for arrays/localQueries/localAccess] [Error matching program output for arrays/localQueries/remoteSubdomainQuery] [Error matching compiler output for arrays/shapes/error-if-non-DR-1] [Error matching compiler output for arrays/shapes/error-if-non-DR-2] [Error matching compiler output for arrays/shapes/error-if-non-DR-3] [Error matching program output for arrays/slices/sliceAssoc] [Error matching program output for arrays/slices/sliceAssocOOB] [Error matching program output for arrays/slices/sliceAssocOOB2] [Error matching program output for arrays/sparse/sparse] [Error matching program output for arrays/userAPI/assocArray (execopts: 1)] [Error matching program output for arrays/userAPI/assocArray (execopts: 2)] [Error matching program output for arrays/userAPI/assocDistributedHashed (execopts: 1)] [Error matching program output for arrays/userAPI/assocDistributedHashed (execopts: 2)] [Error matching program output for associative/array/anonAssocArr] [Error matching program output for associative/array/assocArrOfAssocArr] [Error matching program output for associative/benmcd/thresholdOverride] [Error matching program output for associative/bharshbarg/arrays/badAssocZip] [Error matching program output for associative/bharshbarg/arrays/diffDomZip] [Error matching program output for associative/bharshbarg/arrays/largeLiteral] [Error matching program output for associative/bharshbarg/domains/domainSetOps] [Error matching program output for associative/bharshbarg/domains/opEquals] [Error matching program output for associative/bharshbarg/domains/rangeBad] [Error matching program output for associative/bharshbarg/domains/recordWithRange] [Error matching program output for associative/bharshbarg/domains/reduceArrOfAssocDom] [Error matching program output for associative/bradc/localeDom/assocLocales] [Error matching program output for associative/bradc/localeDom/assocLocales2] [Error matching program output for associative/bradc/localeDom/assocLocales3] [Error matching program output for associative/bradc/assocRecord] [Error matching program output for associative/bradc/clear] [Error matching program output for associative/bradc/removeResizeViaAssign] [Error matching program output for associative/deitz/arrays/test_indefinite1] [Error matching program output for associative/deitz/arrays/test_indefinite2] [Error matching program output for associative/deitz/arrays/test_indefinite3] [Error matching program output for associative/deitz/arrays/test_indefinite4] [Error matching program output for associative/deitz/arrays/test_indefinite5] [Error matching program output for associative/deitz/arrays/test_indefinite6] [Error matching program output for associative/deitz/arrays/test_indefinite7] [Error matching program output for associative/deitz/arrays/test_indefinite8] [Error matching program output for associative/deitz/domains/test_indefinite1] [Error matching program output for associative/deitz/domains/test_indefinite_domain_of_tuple] [Error matching program output for associative/deitz/domains/test_indefinite_remove] [Error matching program output for associative/deitz/domains/test_indefinite_remove2] [Error matching program output for associative/diten/array-as-map-add-index] [Error matching program output for associative/diten/assocArrayOfArithArray] [Error matching program output for associative/diten/enumArrays] [Error matching program output for associative/domain/types/testTuple] [Error matching program output for associative/ferguson/assoc-sort-comparator] [Error matching program output for associative/ferguson/check-clear] [Error matching program output for associative/ferguson/check-removing-and-adding] [Error matching program output for associative/ferguson/plus-reduce-assoc] [Error matching program output for associative/ferguson/plus-reduce-intent-assoc] [Error matching program output for associative/ferguson/tuple-tuple-assoc] [Error matching program output for associative/hilde/reindex] [Error matching compiler output for associative/types/testBorrowed] [Error matching program output for associative/types/testNilableBorrowed] [Error matching program output for associative/types/testNilableOwned] [Error matching program output for associative/types/testNilableShared] [Error matching program output for associative/types/testNilableTuple] [Error matching program output for associative/types/testNilableUnmanaged] [Error matching program output for associative/types/testRecord] [Error matching program output for associative/types/testRecordArrayField] [Error matching program output for associative/waynew/add_remove] [Error matching program output for associative/waynew/add_remove2] [Error matching program output for associative/waynew/indef1] [Error matching program output for associative/waynew/indef2] [Error matching program output for associative/waynew/indef4] [Error matching program output for associative/waynew/indef6] [Error matching program output for associative/waynew/indef7] [Error matching program output for associative/waynew/indef8-fail1] [Error matching program output for associative/waynew/indef8-fail2] [Error matching program output for associative/waynew/indef8] [Error matching program output for associative/waynew/indef8a] [Error matching program output for associative/waynew/indef9] [Error matching program output for associative/waynew/indef9a] [Error matching program output for associative/waynew/tuple_domain] [Error matching program output for associative/waynew/tuple_domain_named] [Error matching program output for associative/waynew/tuple_index] [Error matching program output for associative/waynew/tuple_index2] [Error matching program output for classes/bradc/arrayInClass/arrayOfArithInClass] [Error matching program output for classes/bradc/arrayInClass/genericArrayInClass-arith] [Error matching program output for classes/bradc/arrayInClass/genericArrayInClass-otharrs] [Error matching program output for classes/bradc/arrayInClass/genericArrayInClass-real] [Error matching program output for classes/bradc/arrayInClass/genericClassArray-named] [Error matching program output for classes/bradc/paramInClass/weirdParamInit3] [Error matching program output for classes/bradc/paramInClass/weirdParamInit3a] [Error matching program output for classes/bradc/paramInClass/weirdParamInit4] [Error matching compiler output for classes/delete-free/anymanaged/anymanaged-member-no-given-value-no-writeln] [Error matching compiler output for classes/delete-free/anymanaged/anymanaged-member-used-in-method] [Error matching program output for classes/delete-free/anymanaged/nilable-anymanaged-member-given-value] [Error matching compiler output for classes/delete-free/anymanaged/nilable-anymanaged-member-no-given-value] [Error matching program output for classes/delete-free/anymanaged/nonnilable-anymanaged-member-given-value] [Error matching compiler output for classes/delete-free/anymanaged/nonnilable-anymanaged-member-no-given-value] [Error matching program output for classes/delete-free/owned/bare-owned-leak] [Error matching program output for classes/delete-free/shared/linkedListExample] [Error matching program output for classes/delete-free/tests-from-design-overview/generic-collection-owned] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field-multiple] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field2-borrow] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field2-unmanaged] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field2] [Error matching program output for classes/diten/class_with_domain_and_array] [Error matching program output for classes/ferguson/generic-field/generic-field-default-init] [Error matching program output for classes/ferguson/generic-field/generic-field-integral-not-inited-record] [Error matching program output for classes/ferguson/generic-field/generic-field-integral-not-inited] [Error matching program output for classes/ferguson/generic-field/generic-field-integral] [Error matching program output for classes/ferguson/generic-field/generic-field-new-owned] [Error matching program output for classes/ferguson/generic-field/generic-field-record-not-inited] [Error matching program output for classes/ferguson/generic-field/generic-field-record] [Error matching program output for classes/ferguson/generic-field/generic-field-unmanaged-borrowed] [Error matching program output for classes/ferguson/generic-field/generic-field] [Error matching compiler output for deprecated/IO/localesForRegion] [Error matching program output for deprecated/domains/makeIndexBuffer] [Error matching program output for deprecated/oMap] [Error matching program output for distributions/bharshbarg/forwardDomDist] [Error matching program output for distributions/bradc/assoc/userAssoc-array-domain-zipper] [Error matching program output for distributions/bradc/assoc/userAssoc-array-noelt] [Error matching program output for distributions/bradc/assoc/userAssoc-array-priv-check] [Error matching program output for distributions/bradc/assoc/userAssoc-basic-array] [Error matching program output for distributions/bradc/assoc/userAssoc-basic-domain] [Error matching program output for distributions/bradc/assoc/userAssoc-class] [Error matching program output for distributions/bradc/assoc/userAssoc-dom-operations] [Error matching program output for distributions/bradc/assoc/userAssoc-domain-priv-check] [Error matching program output for distributions/bradc/assoc/userAssoc-domain-stress (execopts: 1)] [Error matching program output for distributions/bradc/assoc/userAssoc-domain-stress (execopts: 2)] [Error matching program output for distributions/bradc/assoc/userAssoc-fcf] [Error matching compiler output for distributions/bradc/wrongDomForDist/wrongType] [Error matching compiler output for distributions/bradc/wrongDomForDist/wrongType2] [Error matching compiler output for distributions/bradc/wrongDomForDist/wrongType3] [Error matching compiler output for distributions/bradc/wrongDomForDist/wrongType4] [Error matching program output for distributions/bradc/ReplWithMultiDim] [Error matching program output for distributions/bradc/distEquality] [Error matching program output for distributions/bradc/passDistDomsToFns] [Error matching program output for distributions/dm/hplx] [Error matching program output for distributions/replicated/ReplicatedMemLeak] [Error matching compiler output for distributions/replicated/ReplicatedNonCopyable] [Error matching program output for distributions/replicated/initStridedWithDense] [Error matching program output for distributions/replicated/remoteOwnership] [Error matching program output for distributions/replicated/scanReplicated] [Error matching program output for distributions/replicated/testReplWrites] [Error matching program output for distributions/replicated/testReplicand] [Error matching program output for distributions/replicated/testUserAPI] [Error matching program output for distributions/robust/arithmetic/basics/test_domain_align] [Error matching program output for distributions/robust/associative/basic/array_iter] [Error matching program output for distributions/robust/associative/basic/array_write] [Error matching program output for distributions/robust/associative/basic/domain_iter] [Error matching program output for distributions/robust/associative/basic/domain_write] [Error matching program output for distributions/robust/associative/basic/promotion] [Error matching program output for distributions/robust/associative/basic/reduce] [Error matching program output for distributions/robust/associative/basic/whole_array_assign] [Error matching program output for distributions/robust/associative/basic/whole_domain_assign] [Error matching program output for distributions/robust/associative/basic/zipper] [Error matching program output for distributions/robust/associative/performance/array_iter] [Error matching program output for distributions/robust/associative/performance/domain_iter] [Error matching program output for distributions/robust/associative/stress/many_array] [Error matching program output for distributions/robust/associative/stress/many_domain] [Error matching program output for distributions/vass/testReplicatedDist1] [Error matching program output for distributions/vass/testReplicatedDistLocal1] [Error matching program output for distributions/vass/testReplicatedVar1] [Error matching program output for distributions/vass/testReplicatedVar2] [Error matching program output for domains/bradc/domEqualityPerf] [Error matching program output for domains/bradc/stringCast] [Error matching compiler output for domains/claridge/associativeStridableQuery] [Error matching compiler output for domains/compilerErrors/constDomain1] [Error matching compiler output for domains/compilerErrors/constDomain10] [Error matching compiler output for domains/compilerErrors/constDomain11] [Error matching compiler output for domains/compilerErrors/constDomain2] [Error matching compiler output for domains/compilerErrors/constDomain3] [Error matching compiler output for domains/compilerErrors/constDomain4] [Error matching compiler output for domains/compilerErrors/constDomain6] [Error matching compiler output for domains/compilerErrors/constDomain7] [Error matching compiler output for domains/compilerErrors/constDomain8] [Error matching compiler output for domains/compilerErrors/constDomain9] [Error matching compiler output for domains/compilerErrors/contains-idxtype] [Error matching compiler output for domains/compilerErrors/contains-rank] [Error matching compiler output for domains/compilerErrors/notsupportedBulkAdd-DR] [Error matching compiler output for domains/compilerErrors/notsupportedBulkAdd-assoc] [Error matching program output for domains/compilerErrors/notsupportedBulkAdd-ok] [Error matching compiler output for domains/compilerErrors/notsupportedCreateBuffer-DR] [Error matching program output for domains/compilerErrors/notsupportedCreateBuffer-ok] [Error matching compiler output for domains/compilerErrors/notsupportedEq-assoc-sparse] [Error matching compiler output for domains/compilerErrors/notsupportedEq-dr-assoc] [Error matching compiler output for domains/compilerErrors/notsupportedIndexOrder-assoc] [Error matching program output for domains/compilerErrors/notsupportedIndexOrder-ok] [Error matching compiler output for domains/compilerErrors/notsupportedIndexOrder-sparse] [Error matching compiler output for domains/compilerErrors/notsupportedNeq-assoc-sparse] [Error matching compiler output for domains/compilerErrors/notsupportedNeq-dr-assoc] [Error matching compiler output for domains/compilerErrors/notsupportedOpAlign-assoc] [Error matching compiler output for domains/compilerErrors/notsupportedOpBy-assoc] [Error matching compiler output for domains/compilerErrors/notsupportedOpCount-assoc] [Error matching program output for domains/compilerErrors/notsupportedOrderIndex-ok] [Error matching compiler output for domains/compilerErrors/notsupportedParsafe-DR] [Error matching compiler output for domains/compilerErrors/notsupportedParsafe-block] [Error matching compiler output for domains/compilerErrors/notsupportedParsafe-ok] [Error matching compiler output for domains/compilerErrors/notsupportedParsafe-sparse] [Error matching compiler output for domains/compilerErrors/notsupportedRectOps-assoc] [Error matching program output for domains/compilerErrors/notsupportedRectOps-ok] [Error matching compiler output for domains/compilerErrors/notsupportedStridable-assoc] [Error matching program output for domains/compilerErrors/notsupportedStridable-ok] [Error matching compiler output for domains/compilerErrors/sparseSubdom-types] [Error matching compiler output for domains/compilerErrors/sparseSubdom-values] [Error matching program output for domains/deitz/test_domain_type_actual] [Error matching program output for domains/deitz/test_enum_domain1] [Error matching program output for domains/dinan/assoc_domain_remove_oob] [Error matching program output for domains/dinan/assoc_domain_tuple] [Error matching program output for domains/diten/assignRangeTupToDom] [Error matching program output for domains/diten/assignStridedRangeTupToDom] [Error matching program output for domains/diten/assocDomIntersect] [Error matching program output for domains/diten/assocOfTupleOfRange] [Error matching program output for domains/elliot/primes] [Error matching program output for domains/ferguson/build-associative] [Error matching program output for domains/johnk/associative/literals] [Error matching program output for domains/johnk/capacityAssoc] [Error matching program output for domains/johnk/capacityParSafe] [Error matching program output for domains/johnk/capacityTooSmall] [Error matching compiler output for domains/methods/isXXX] [Error matching program output for domains/methods/shape] [Error matching program output for domains/operators/domainAdd] [Error matching program output for domains/operators/domainSub] [Error matching program output for domains/stonea/typeQueryFuncs] [Error matching program output for domains/sungeun/assoc/arrayIdxType] [Error matching program output for domains/sungeun/assoc/clear] [Error matching program output for domains/sungeun/assoc/equality (compopts: 1)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 2)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 3)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 4)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 5)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 6)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 7)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 8)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 9)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 10)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 11)] [Error matching program output for domains/sungeun/assoc/equality (compopts: 12)] [Error matching program output for domains/sungeun/assoc/equals_minus_1 (compopts: 1)] [Error matching program output for domains/sungeun/assoc/equals_minus_1 (compopts: 2)] [Error matching program output for domains/sungeun/assoc/equals_minus_2 (compopts: 1)] [Error matching program output for domains/sungeun/assoc/equals_minus_2 (compopts: 2)] [Error matching program output for domains/sungeun/assoc/equals_plus_1 (compopts: 1)] [Error matching program output for domains/sungeun/assoc/equals_plus_1 (compopts: 2)] [Error matching program output for domains/sungeun/assoc/equals_plus_2 (compopts: 1)] [Error matching program output for domains/sungeun/assoc/equals_plus_2 (compopts: 2)] [Error matching compiler output for domains/sungeun/assoc/expand (compopts: 1)] [Error matching compiler output for domains/sungeun/assoc/expand (compopts: 2)] [Error matching compiler output for domains/sungeun/assoc/exterior (compopts: 1)] [Error matching compiler output for domains/sungeun/assoc/exterior (compopts: 2)] [Error matching program output for domains/sungeun/assoc/forall (compopts: 1)] [Error matching program output for domains/sungeun/assoc/forall (compopts: 2)] [Error matching program output for domains/sungeun/assoc/index_not_in_domain_1 (compopts: 1)] [Error matching program output for domains/sungeun/assoc/index_not_in_domain_1 (compopts: 2)] [Error matching program output for domains/sungeun/assoc/index_not_in_domain_2 (compopts: 1)] [Error matching program output for domains/sungeun/assoc/index_not_in_domain_2 (compopts: 2)] [Error matching compiler output for domains/sungeun/assoc/interior (compopts: 1)] [Error matching compiler output for domains/sungeun/assoc/interior (compopts: 2)] [Error matching program output for domains/sungeun/assoc/minus_equals (compopts: 1)] [Error matching program output for domains/sungeun/assoc/minus_equals (compopts: 2)] [Error matching program output for domains/sungeun/assoc/parSafeMember] [Error matching program output for domains/sungeun/assoc/plus_equals (compopts: 1)] [Error matching program output for domains/sungeun/assoc/plus_equals (compopts: 2)] [Error matching program output for domains/sungeun/assoc/plus_minus_equals (compopts: 1)] [Error matching program output for domains/sungeun/assoc/plus_minus_equals (compopts: 2)] [Error matching program output for domains/sungeun/assoc/stress (compopts: 1, execopts: 1)] [Error matching program output for domains/sungeun/assoc/stress (compopts: 1, execopts: 2)] [Error matching program output for domains/sungeun/assoc/stress (compopts: 2, execopts: 1)] [Error matching program output for domains/sungeun/assoc/stress (compopts: 2, execopts: 2)] [Error matching program output for domains/sungeun/assoc/stress.numthr (compopts: 1, execopts: 1)] [Error matching program output for domains/sungeun/assoc/stress.numthr (compopts: 1, execopts: 2)] [Error matching program output for domains/sungeun/assoc/stress.numthr (compopts: 2, execopts: 1)] [Error matching program output for domains/sungeun/assoc/stress.numthr (compopts: 2, execopts: 2)] [Error matching compiler output for domains/sungeun/assoc/translate (compopts: 1)] [Error matching compiler output for domains/sungeun/assoc/translate (compopts: 2)] [Error matching program output for domains/unsafeAssign/DefaultRectangular2D] [Error matching program output for domains/unsafeAssign/DefaultRectangular2DScale] [Error matching compiler output for domains/unsafeAssign/ErrorChecksInitializeNDI] [Error matching compiler output for domains/unsafeAssign/ErrorIndexArrayShapeMismatch] [Error matching compiler output for domains/unsafeAssign/ErrorIndexArrayShapeMismatch2D] [Error matching compiler output for domains/unsafeAssign/ErrorInitializeElementIsDI] [Error matching program output for domains/unsafeAssign/HaltBadArrayIndex] [Error matching program output for domains/unsafeAssign/HaltChecksDuplicateInit] [Error matching program output for domains/unsafeAssign/HaltChecksFail1D] [Error matching program output for domains/unsafeAssign/HaltChecksNDI] [Error matching program output for domains/unsafeAssign/HaltUnownedArray] [Error matching program output for domains/unsafeAssign/NoArraysDeclaredOverDom] [Error matching program output for domains/unsafeAssign/UnsafeAssignMotivators] [Error matching program output for domains/userAPI/contains] [Error matching program output for domains/userAPI/isEmptyTestDomain] [Error matching program output for domains/vass/arrays-of-domains] [Error matching program output for domains/vass/assoc-domain-assign-1] [Error matching compiler output for domains/vass/assoc-idxtype-error-1] [Error matching compiler output for domains/vass/assoc-idxtype-error-2] [Error matching program output for domains/vass/enumerated-domain-initializer-1] [Error matching program output for domains/vass/generic-domain-field] [Error matching program output for exercises/c-ray/old/c-ray.badscenes (execopts: 1)] [Error matching program output for exercises/c-ray/old/c-ray.badscenes (execopts: 2)] [Error matching program output for exercises/c-ray/old/c-ray.badscenes (execopts: 3)] [Error matching program output for exercises/c-ray/old/c-ray.badscenes (execopts: 4)] [Error matching program output for exercises/c-ray/old/c-ray.badscenes (execopts: 5)] [Error matching program output for exercises/c-ray/old/c-ray.badscenes (execopts: 6)] [Error matching program output for exercises/c-ray/old/c-ray.badscenes (execopts: 7)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 1, execopts: 1)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 1, execopts: 2)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 1, execopts: 3)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 1, execopts: 4)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 1, execopts: 5)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 1, execopts: 6)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 2, execopts: 1)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 2, execopts: 2)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 2, execopts: 3)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 2, execopts: 4)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 2, execopts: 5)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 2, execopts: 6)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 3, execopts: 1)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 3, execopts: 2)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 3, execopts: 3)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 3, execopts: 4)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 3, execopts: 5)] [Error matching program output for exercises/c-ray/old/c-ray (compopts: 3, execopts: 6)] [Error matching program output for exercises/c-ray/old/c-ray.usage] [Error matching program output for exercises/c-ray/solutions/c-ray-1] [Error matching program output for exercises/c-ray/solutions/c-ray-1a] [Error matching program output for exercises/c-ray/solutions/c-ray-2] [Error matching program output for exercises/c-ray/solutions/c-ray-2a] [Error matching program output for exercises/c-ray/solutions/c-ray-3] [Error matching program output for exercises/c-ray/solutions/c-ray-3a] [Error matching program output for exercises/c-ray/solutions/c-ray-4] [Error matching program output for exercises/c-ray/solutions/c-ray-4a] [Error matching program output for exercises/c-ray/solutions/c-ray-5 (execopts: 1)] [Error matching program output for exercises/c-ray/solutions/c-ray-5 (execopts: 2)] [Error matching program output for exercises/c-ray/solutions/c-ray-5 (execopts: 3)] [Error matching program output for exercises/c-ray/solutions/c-ray-6] [Error matching program output for exercises/c-ray/solutions/c-ray-7] [Error matching program output for exercises/c-ray/solutions/c-ray-8] [Error matching program output for exercises/c-ray/c-ray] [Error matching program output for exercises/duplicates/duplicates-alt-assoc-reduce (execopts: 1)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc-reduce (execopts: 2)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc-reduce (execopts: 3)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc-reduce (execopts: 4)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc-reduce (execopts: 5)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc (execopts: 1)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc (execopts: 2)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc (execopts: 3)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc (execopts: 4)] [Error matching program output for exercises/duplicates/duplicates-alt-assoc (execopts: 5)] [Error matching program output for exercises/duplicates/duplicates-bonus-b2-record (execopts: 1)] [Error matching program output for exercises/duplicates/duplicates-bonus-b2-record (execopts: 2)] [Error matching program output for exercises/duplicates/duplicates-bonus-b2-record (execopts: 3)] [Error matching program output for exercises/duplicates/duplicates-bonus-b2-record (execopts: 4)] [Error matching program output for exercises/duplicates/duplicates-bonus-b2-record (execopts: 5)] [Error matching program output for exercises/duplicates/duplicates-bonus-b3-size (execopts: 1)] [Error matching program output for exercises/duplicates/duplicates-bonus-b3-size (execopts: 2)] [Error matching program output for exercises/duplicates/duplicates-bonus-b3-size (execopts: 3)] [Error matching program output for exercises/duplicates/duplicates-bonus-b3-size (execopts: 4)] [Error matching program output for exercises/duplicates/duplicates-bonus-b3-size (execopts: 5)] [Error matching program output for exercises/duplicates/duplicates-step0-start] [Error matching program output for exercises/duplicates/duplicates-step1-for (execopts: 1)] [Error matching program output for exercises/duplicates/duplicates-step1-for (execopts: 2)] [Error matching program output for exercises/duplicates/duplicates-step1-for (execopts: 3)] [Error matching program output for exercises/duplicates/duplicates-step1-for (execopts: 4)] [Error matching program output for exercises/duplicates/duplicates-step1-for (execopts: 5)] [Error matching program output for exercises/duplicates/duplicates-step2-forall (execopts: 1)] [Error matching program output for exercises/duplicates/duplicates-step2-forall (execopts: 2)] [Error matching program output for exercises/duplicates/duplicates-step2-forall (execopts: 3)] [Error matching program output for exercises/duplicates/duplicates-step2-forall (execopts: 4)] [Error matching program output for exercises/duplicates/duplicates-step2-forall (execopts: 5)] [Error matching program output for exercises/duplicates/duplicates-step3-error (execopts: 1)] [Error matching program output for exercises/duplicates/duplicates-step3-error (execopts: 2)] [Error matching program output for exercises/duplicates/duplicates-step3-error (execopts: 3)] [Error matching program output for exercises/duplicates/duplicates-step3-error (execopts: 4)] [Error matching program output for exercises/duplicates/duplicates-step3-error (execopts: 5)] [Error matching program output for expressions/casts/castDomainToString] [Error matching program output for expressions/noinit/array-noinits-assoc] [Error matching compiler output for extern/bradc/sparseToExtern] [Error matching program output for functions/bharshbarg/assoc-ref-return] [Error matching program output for functions/bradc/arrayFormals/test_formal_assoc_arg] [Error matching program output for functions/deitz/iterators/leader_follower/test_neg_stride_range_leader_follower] [Error matching program output for functions/iterators/diten/assocStandalone] [Error matching compiler output for functions/promotion/issue-12736-error1] [Error matching compiler output for functions/promotion/issue-12736-error2] [Error matching compiler output for functions/promotion/issue-12736-error3] [Error matching program output for functions/promotion/issue-12736-ok] [Error matching program output for io/ferguson/assoc-array-chpl] [Error matching program output for io/ferguson/assoc-domains] [Error matching program output for library/draft/DataFrames/psahabu/AccessSeries] [Error matching program output for library/draft/DataFrames/psahabu/AddSeries] [Error matching program output for library/draft/DataFrames/psahabu/ArithNoneSeries] [Error matching program output for library/draft/DataFrames/psahabu/ContainSeries] [Error matching program output for library/draft/DataFrames/psahabu/FilterNoneSeries] [Error matching program output for library/draft/DataFrames/psahabu/FilterSeries] [Error matching program output for library/draft/DataFrames/psahabu/HelloDataFrame] [Error matching program output for library/draft/DataFrames/psahabu/HelloSeries] [Error matching program output for library/draft/DataFrames/psahabu/IterNoneSeries] [Error matching program output for library/draft/DataFrames/psahabu/IterSeries] [Error matching program output for library/draft/DataFrames/psahabu/MixedOperateSeries] [Error matching program output for library/draft/DataFrames/psahabu/MultiplySeries] [Error matching program output for library/draft/DataFrames/psahabu/MutateDataFrame] [Error matching program output for library/draft/DataFrames/psahabu/ScalarPromSeries] [Error matching program output for library/draft/DataFrames/psahabu/SubtractSeries] [Error matching program output for library/draft/DataFrames/psahabu/SumMinMaxSeries] [Error matching program output for library/packages/ArgumentParser/ArgumentParserExample] [Error matching program output for library/packages/ArgumentParser/ArgumentParserTests] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 1)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 2)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 3)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 4)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 5)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 6)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 7)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 8)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageBad (execopts: 9)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest.PtShadow] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest.PtSingle] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest.bad.pt] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest (execopts: 1)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest (execopts: 2)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest (execopts: 3)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest (execopts: 4)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest (execopts: 5)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest (execopts: 6)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTest (execopts: 7)] [Error matching program output for library/packages/ArgumentParser/ArgumentParserUsageTestPtArr] [Error matching program output for library/packages/ArgumentParser/MainArgsAltDelimiter] [Error matching program output for library/packages/Channel/correctness/bufferedSendRecv] [Error matching program output for library/packages/Channel/correctness/channelIterator] [Error matching program output for library/packages/Channel/correctness/classChannel] [Error matching program output for library/packages/Channel/correctness/closeClosedChannel] [Error matching program output for library/packages/Channel/correctness/closedRecv] [Error matching program output for library/packages/Channel/correctness/closedSend] [Error matching program output for library/packages/Channel/correctness/coforallSelectRecv] [Error matching program output for library/packages/Channel/correctness/coforallSelectSendRecv] [Error matching program output for library/packages/Channel/correctness/coforallSendRecv] [Error matching program output for library/packages/Channel/correctness/recordChannel] [Error matching program output for library/packages/Channel/correctness/select] [Error matching program output for library/packages/Channel/correctness/sharedClassChannel] [Error matching program output for library/packages/Channel/correctness/unbufferedSendRecv] [Error matching program output for library/packages/Channel/performance/chanContended] [Error matching program output for library/packages/Channel/performance/chanUncontended] [Error matching program output for library/packages/Channel/performance/selectSyncContended] [Error matching program output for library/packages/Channel/performance/selectUncontended] [Error matching program output for library/packages/DistributedIters/checkGoodInput (execopts: 1)] [Error matching program output for library/packages/DistributedIters/checkGoodInput (execopts: 2)] [Error matching program output for library/packages/Itertools/repeat/check_Parallel_zippered] [Error matching program output for library/packages/LinearAlgebra/correctness/no-dependencies/correctness-Sparse-import] [Error matching program output for library/packages/LinearAlgebra/correctness/no-dependencies/correctness] [Error matching program output for library/packages/LinearAlgebra/correctness/no-dependencies/testExpm] [Error matching program output for library/packages/LinearAlgebra/performance/me/me-perf] [Error matching program output for library/packages/Sort/correctness/sorty-import (execopts: 1)] [Error matching program output for library/packages/Sort/correctness/sorty-import (execopts: 2)] [Error matching program output for library/packages/Sort/correctness/sorty-import (execopts: 3)] [Error matching program output for library/packages/Sort/correctness/sorty (execopts: 1)] [Error matching program output for library/packages/Sort/correctness/sorty (execopts: 2)] [Error matching program output for library/packages/Sort/correctness/sorty (execopts: 3)] [Error matching program output for library/packages/SortedMap/addOrSet/testAddOrSet] [Error matching program output for library/packages/SortedMap/addSet/testAddSet] [Error matching program output for library/packages/SortedMap/clear/testClear] [Error matching program output for library/packages/SortedMap/contains/testContains] [Error matching program output for library/packages/SortedMap/getAndRemove/testGetRemove] [Error matching program output for library/packages/SortedMap/getBorrowed/testGetBorrowed] [Error matching program output for library/packages/SortedMap/getReference/testGetReference] [Error matching program output for library/packages/SortedMap/getReference/testGetReferenceRecord] [Error matching program output for library/packages/SortedMap/getValue/testGetValue] [Error matching compiler output for library/packages/SortedMap/getValue/testGetValueOwned] [Error matching program output for library/packages/SortedMap/getValue/testGetValueRecord] [Error matching program output for library/packages/SortedMap/init/testInit] [Error matching program output for library/packages/SortedMap/isEmpty/testIsEmpty] [Error matching program output for library/packages/SortedMap/iterators/testIterators] [Error matching program output for library/packages/SortedMap/operators/testEquality] [Error matching program output for library/packages/SortedMap/operators/testSetAssignOps] [Error matching program output for library/packages/SortedMap/operators/testSetOps] [Error matching program output for library/packages/SortedMap/remove/testRemove] [Error matching program output for library/packages/SortedMap/size/testSize] [Error matching program output for library/packages/SortedMap/this/testThis] [Error matching program output for library/packages/SortedMap/toArray/testToArray] [Error matching program output for library/packages/SortedMap/types/mapOfArray] [Error matching program output for library/packages/SortedMap/types/testBorrowed] [Error matching program output for library/packages/SortedMap/types/testBorrowed2] [Error matching program output for library/packages/SortedMap/types/testNilableBorrowed] [Error matching program output for library/packages/SortedMap/types/testNilableOwned] [Error matching program output for library/packages/SortedMap/types/testNilableShared] [Error matching program output for library/packages/SortedMap/types/testNilableTuple] [Error matching program output for library/packages/SortedMap/types/testNilableUnmanaged] [Error matching program output for library/packages/SortedMap/types/testOwned] [Error matching program output for library/packages/SortedMap/types/testRecord] [Error matching program output for library/packages/SortedMap/types/testShared] [Error matching program output for library/packages/SortedMap/types/testShared2] [Error matching program output for library/packages/SortedMap/types/testTuple] [Error matching program output for library/packages/SortedMap/types/testUnmanaged] [Error matching program output for library/packages/SortedMap/update/testUpdate] [Error matching program output for library/packages/TOML/BurntSushi/Passing (execopts: 1)] [Error matching program output for library/packages/TOML/BurntSushi/Passing (execopts: 2)] [Error matching program output for library/packages/TOML/BurntSushi/Passing (execopts: 3)] [Error matching program output for library/packages/TOML/BurntSushi/Passing (execopts: 4)] [Error matching program output for library/packages/TOML/BurntSushi/Passing (execopts: 5)] [Error matching program output for library/packages/TOML/BurntSushi/Passing (execopts: 6)] [Error matching program output for library/packages/TOML/BurntSushi/Passing (execopts: 7)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 1)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 2)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 3)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 4)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 5)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 6)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 7)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 8)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 9)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 10)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 11)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 12)] [Error matching program output for library/packages/TOML/test/TomlTest (execopts: 13)] [Error matching program output for library/packages/TOML/test/UTomlTest] [Error matching program output for library/packages/TOML/test/checkParseLoop] [Error matching program output for library/packages/TOML/test/commentTest] [Error matching program output for library/packages/TOML/test/date] [Error matching program output for library/packages/TOML/test/fileTest] [Error matching program output for library/packages/TOML/test/newline] [Error matching program output for library/packages/TOML/test/stringTest] [Error matching program output for library/packages/TOML/test/testtime] [Error matching program output for library/packages/UnitTest/AssertEqual/AssertEqualTest] [Error matching program output for library/packages/UnitTest/AssertEqual/test_string_equality] [Error matching program output for library/packages/UnitTest/AssertFalse/AssertFalseTest] [Error matching program output for library/packages/UnitTest/AssertGreater/AssertGreaterTest] [Error matching program output for library/packages/UnitTest/AssertLess/AssertLessTest] [Error matching program output for library/packages/UnitTest/AssertNotEqual/AssertNotEqualTest] [Error matching program output for library/packages/UnitTest/AssertTrue/AssertTrueTest] [Error matching program output for library/packages/UnitTest/GetTest/Primitive_Get_Test] [Error matching program output for library/packages/UnitTest/GetTest/Primitive_Get_multiple] [Error matching program output for library/packages/UnitTest/GetTest/Primitive_Loop] [Error matching program output for library/packages/UnitTest/GetTest/Primitive_Param] [Error matching program output for library/packages/UnitTest/PopulateTests_PRIM/TestCount] [Error matching program output for library/packages/UnitTest/PopulateTests_PRIM/TestMultipleArgs] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/Gather_MultipleArgs] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/Gather_NoArg] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/GetByIndex_MultipleArgs] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/GetByIndex_NoArgs] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/GetByIndex_WringArg] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/GetByName_MultipleArgs] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/GetByName_NoArgs] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/GetByName_Unknown] [Error matching compiler output for library/packages/UnitTest/PrimitivesError/GetByName_WrongArgs] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 1)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 2)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 3)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 4)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 5)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 6)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 7)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 8)] [Error matching program output for library/packages/UnitTest/Launcher_Test (execopts: 9)] [Error matching compiler output for library/packages/canCompileNoLink/MPItest] [Error matching compiler output for library/packages/canCompileNoLink/testSockets] [Error matching program output for library/standard/Heap/assignment/heapAssignment] [Error matching program output for library/standard/Heap/consume/heapConsume] [Error matching program output for library/standard/Heap/createHeap/createHeapFromArray] [Error matching program output for library/standard/Heap/createHeap/createHeapFromList] [Error matching program output for library/standard/Heap/isEmpty/heapIsEmpty] [Error matching program output for library/standard/Heap/push/heapPush] [Error matching program output for library/standard/Heap/size/heapSize] [Error matching program output for library/standard/Heap/toArray/heapToArray] [Error matching program output for library/standard/Heap/type/testBorrowed] [Error matching program output for library/standard/Heap/type/testNilableBorrowed] [Error matching program output for library/standard/Heap/type/testNilableOwned] [Error matching program output for library/standard/Heap/type/testNilableShared] [Error matching program output for library/standard/Heap/type/testNilableTuple] [Error matching program output for library/standard/Heap/type/testNilableUnmanaged] [Error matching program output for library/standard/Heap/type/testOwned] [Error matching program output for library/standard/Heap/type/testRecord] [Error matching program output for library/standard/Heap/type/testShared] [Error matching program output for library/standard/Heap/type/testTuple] [Error matching program output for library/standard/Heap/type/testTuple2] [Error matching program output for library/standard/Heap/type/testTuple3] [Error matching program output for library/standard/Heap/type/testUnmanaged] [Error matching compiler output for library/standard/Random/stonea/fillRandomAssociative] [Error matching compiler output for library/standard/Random/stonea/permutationAssociative] [Error matching compiler output for library/standard/Random/stonea/shuffleAssociative] [Error matching program output for mason/build/noDeps] [Error matching program output for mason/chplVersion/mason-chpl-version-build] [Error matching program output for mason/chplVersion/mason-chpl-version-new] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 1)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 2)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 3)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 4)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 5)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 6)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 7)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 8)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 9)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 10)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 11)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 12)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 13)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 14)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 15)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 16)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 17)] [Error matching program output for mason/chplVersion/mason-chpl-version-update (execopts: 18)] [Error matching program output for mason/env/mason-env] [Error matching program output for mason/env/mason-registry] [Error matching program output for mason/mason-example-with-opts/mason-example] [Error matching program output for mason/mason-example/mason-example] [Error matching program output for mason/mason-external/libtomlc99/mason-external] [Error matching program output for mason/mason-external/masonExternalRanges/mason-external-range] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 1)] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 2)] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 3)] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 4)] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 5)] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 6)] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 7)] [Error matching program output for mason/mason-modify/masonModifyTest (execopts: 8)] [Error matching program output for mason/mason-offline/publishOffline] [Error matching program output for mason/mason-test/mason-test] [Error matching program output for mason/mason-update-toml-error/mason-chpl-version-update (execopts: 1)] [Error matching program output for mason/mason-update-toml-error/mason-chpl-version-update (execopts: 2)] [Error matching program output for mason/mason-update-toml-error/mason-chpl-version-update (execopts: 3)] [Error matching program output for mason/mason-update-toml-error/mason-chpl-version-update (execopts: 4)] [Error matching program output for mason/masonInit/masonInitModule] [Error matching program output for mason/masonInit/masonInitPathTest] [Error matching program output for mason/masonInit/masonInitTest] [Error matching program output for mason/masonInit/masonInitTest2] [Error matching program output for mason/masonTestSome/mason-test-noShow] [Error matching program output for mason/masonTestSome/mason-test-show] [Error matching program output for mason/masonTestSome/mason-test-some] [Error matching program output for mason/masonTestSubString/mason-test-sub-string] [Error matching program output for mason/pkgconfig-tests/openssl] [Error matching program output for mason/pkgconfig-tests/zlib] [Error matching program output for mason/publish/create-registry/create-registry] [Error matching program output for mason/publish/badDry] [Error matching program output for mason/publish/badRegTest] [Error matching program output for mason/publish/noFork] [Error matching program output for mason/publish/packageName] [Error matching program output for mason/publish/publish] [Error matching program output for mason/publish/publishGitCheck] [Error matching program output for mason/publish/publishHelp] [Error matching program output for mason/publish/publishHelpShort] [Error matching program output for mason/run/mason-run] [Error matching program output for mason/search/badFileName/mason-search] [Error matching program output for mason/search/cacheTest/mason-search] [Error matching program output for mason/search/mason-search (execopts: 1)] [Error matching program output for mason/search/mason-search (execopts: 2)] [Error matching program output for mason/search/mason-search (execopts: 3)] [Error matching program output for mason/search/mason-search (execopts: 4)] [Error matching program output for mason/search/mason-search (execopts: 5)] [Error matching program output for mason/search/mason-search (execopts: 6)] [Error matching program output for mason/search/mason-search (execopts: 7)] [Error matching program output for mason/search/mason-search (execopts: 8)] [Error matching program output for mason/search/mason-search (execopts: 9)] [Error matching program output for mason/search/mason-search (execopts: 10)] [Error matching program output for mason/subdir-commands/mason-run] [Error matching program output for mason/masonAddBadDep] [Error matching program output for mason/masonGitDeps] [Error matching program output for mason/masonNewBadName (execopts: 1)] [Error matching program output for mason/masonNewBadName (execopts: 2)] [Error matching program output for mason/masonNewBadName (execopts: 3)] [Error matching program output for mason/masonNewBadName (execopts: 4)] [Error matching program output for mason/masonNewBadName (execopts: 5)] [Error matching program output for mason/masonNewBadName (execopts: 6)] [Error matching program output for mason/masonNewModule] [Error matching program output for mason/masonNewTest] [Error matching program output for mason/masonUpdateTest (execopts: 1)] [Error matching program output for mason/masonUpdateTest (execopts: 2)] [Error matching program output for memory/sungeun/refCount/domainMaps] [Error matching program output for multilocale/diten/oneOrMoreLocales/assocArrayOfRemoteArithArray] [Error matching program output for multilocale/strings/assocOfString] [Error matching program output for npb/cg/bradc/cg-dense] [Error matching program output for npb/cg/bradc/cg-makea1-small-sparse-countInds] [Error matching program output for npb/cg/bradc/cg-makea1-small-sparse] [Error matching program output for npb/cg/bradc/cg-makea1-small] [Error matching program output for npb/cg/bradc/cg-makea1-sparse-sort] [Error matching program output for npb/cg/bradc/cg-makea1] [Error matching program output for npb/cg/bradc/cg-makea2-small-sparse] [Error matching program output for npb/cg/bradc/cg-makea2] [Error matching program output for npb/cg/bradc/cg-makea3] [Error matching program output for npb/cg/bradc/cg-printa] [Error matching program output for npb/cg/bradc/cg-sparse-partred] [Error matching program output for npb/cg/bradc/cg-sparse] [Error matching program output for optimizations/autoLocalAccess/localArrays (compopts: 7)] [Error matching program output for optimizations/autoLocalAccess/regularDeclaration (compopts: 5)] [Error matching program output for parallel/forall/reduce-intents/ri-4-arrdom.replicated] [Error matching program output for parallel/forall/vass/other/alist-error] [Error matching program output for parsing/ferguson/trailing-comma] [Error matching program output for performance/compiler/bradc/cg-sparse-timecomp] [Error matching program output for puzzles/deitz/digits3] [Error matching program output for puzzles/deitz/roman] [Error matching program output for reductions/userdefined/slowSum] [Error matching program output for reductions/vass/histogram-1] [Error matching program output for reductions/vass/histogram-2] [Error matching program output for reductions/vass/reductions-stress-fast] [Error matching program output for reductions/vass/reductions-stress-mf] [Error matching program output for release/examples/patterns/readcsv] [Error matching program output for release/examples/primers/LinearAlgebralib] [Error matching program output for release/examples/primers/associative] [Error matching program output for release/examples/primers/learnChapelInYMinutes] [Error matching program output for release/examples/primers/replicated] [Error matching program output for release/examples/primers/specialMethods] [Error matching program output for release/examples/spec/Arrays/adecl-assocLiteral] [Error matching program output for release/examples/spec/Arrays/assoc-add-index] [Error matching program output for release/examples/spec/Domains/associativeDomain] [Error matching program output for release/examples/spec/Records/userhash] [Error matching compiler output for sparse/s.salem/member-errors] [Error matching program output for sparse/s.salem/member] [Error matching program output for sparse/slices/sparseSliceDenseBlock] [Error matching program output for studies/590o/alaska/graph] [Error matching program output for studies/590o/blerner/xml-parse] [Error matching program output for studies/590o/bradc/intset] [Error matching program output for studies/590o/kfm/solver-blc] [Error matching program output for studies/590o/kfm/solver] [Error matching program output for studies/adventOfCode/2021/bradc/day10 (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day10 (execopts: 2)] [Error matching program output for studies/adventOfCode/2021/bradc/day10a (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day10a (execopts: 2)] [Error matching program output for studies/adventOfCode/2021/bradc/day12 (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day12 (execopts: 2)] [Error matching program output for studies/adventOfCode/2021/bradc/day12 (execopts: 3)] [Error matching program output for studies/adventOfCode/2021/bradc/day12 (execopts: 4)] [Error matching program output for studies/adventOfCode/2021/bradc/day12a (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day12a (execopts: 2)] [Error matching program output for studies/adventOfCode/2021/bradc/day12a (execopts: 3)] [Error matching program output for studies/adventOfCode/2021/bradc/day14 (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day14 (execopts: 2)] [Error matching program output for studies/adventOfCode/2021/bradc/day14a (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day14a (execopts: 2)] [Error matching program output for studies/adventOfCode/2021/bradc/day15 (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day15 (execopts: 2)] [Error matching program output for studies/adventOfCode/2021/bradc/day15a] [Error matching program output for studies/adventOfCode/2021/bradc/day8a (execopts: 1)] [Error matching program output for studies/adventOfCode/2021/bradc/day8a (execopts: 2)] [Error matching program output for studies/bale/toposort/toposort (execopts: 1)] [Error matching program output for studies/bale/toposort/toposort (execopts: 2)] [Error matching program output for studies/glob/test_glob] [Error matching program output for studies/graph500/v2/main] [Error matching program output for studies/hpcc/STREAMS/bradc/stream-block1dclass] [Error matching program output for studies/labelprop/labelprop-tweets (execopts: 1)] [Error matching program output for studies/labelprop/labelprop-tweets (execopts: 2)] [Error matching program output for studies/labelprop/labelprop-tweets (execopts: 3)] [Error matching program output for studies/madness/aniruddha/madchap/mytests/par-compress/test_compress] [Error matching program output for studies/madness/aniruddha/madchap/mytests/par-refine/test_refine] [Error matching program output for studies/madness/aniruddha/madchap/recordBug/test_likepy] [Error matching program output for studies/madness/aniruddha/madchap/test_diff] [Error matching program output for studies/madness/aniruddha/madchap/test_gaxpy] [Error matching program output for studies/madness/aniruddha/madchap/test_likepy] [Error matching program output for studies/madness/aniruddha/madchap/test_mul] [Error matching program output for studies/madness/aniruddha/madchap/test_showboxes] [Error matching program output for studies/madness/common/test_diff] [Error matching program output for studies/madness/common/test_gaxpy] [Error matching program output for studies/madness/common/test_likepy] [Error matching program output for studies/madness/common/test_mul] [Error matching program output for studies/madness/common/test_showboxes] [Error matching program output for studies/madness/dinan/mad_chapel/test_diff] [Error matching program output for studies/madness/dinan/mad_chapel/test_gaxpy] [Error matching program output for studies/madness/dinan/mad_chapel/test_likepy] [Error matching program output for studies/madness/dinan/mad_chapel/test_mul] [Error matching program output for studies/madness/dinan/mad_chapel/test_showboxes] [Error matching program output for studies/ssca2/graphio/graphio] [Error matching program output for studies/ssca2/main/SSCA2_main (compopts: 1)] [Error matching program output for studies/ssca2/main/SSCA2_main (compopts: 2)] [Error matching program output for studies/ssca2/main/SSCA2_main (compopts: 3)] [Error matching program output for studies/ssca2/main/SSCA2_main (compopts: 4)] [Error matching program output for studies/ssca2/main/SSCA2_main (compopts: 5)] [Error matching program output for studies/ssca2/test-rmatalt/nondet] [Error matching program output for studies/ssca2/test-rmatalt/reproduc (execopts: 1)] [Error matching program output for studies/ssca2/test-rmatalt/reproduc (execopts: 2)] [Error matching program output for studies/ssca2/test-rmatalt/reproduc (execopts: 3)] [Error matching program output for studies/ssca2/test-rmatalt/reproduc (execopts: 4)] [Error matching program output for studies/ssca2/test-rmatalt/reproduc (execopts: 5)] [Error matching program output for studies/twitter/strshuffle] [Error matching program output for trivial/diten/infix2postfix] [Error matching program output for types/bytes/assocDomKey] [Error matching program output for types/chplhashtable/GenericAggregateHash] [Error matching program output for types/chplhashtable/Issue11613] [Error matching program output for types/collections/indices] [Error matching compiler output for types/cptr/c_ptrToSparse] [Error matching program output for types/enum/diten/enumDom] [Error matching compiler output for types/tuple/these/zip_forall_assoc_error] [Error matching program output for types/type_variables/ferguson/returning-runtime-type-from-global] [Error matching program output for types/type_variables/ferguson/runtime-type-call] [Error matching program output for types/type_variables/ferguson/runtime-type-global-call] [Error matching program output for types/type_variables/ferguson/runtime-type-global-literal] [Error matching program output for types/type_variables/ferguson/runtime-type-identity] [Error matching program output for types/type_variables/ferguson/runtime-type-in-class] [Error matching program output for types/type_variables/ferguson/runtime-type-literal] [Error matching compiler output for unstable/bulkAddAndCIB] [Error matching program output for users/engin/sparse_bulk_dist/sparseAdd1D] [Error matching program output for users/engin/sparse_bulk_dist/sparseAdd2D (compopts: 1)] [Error matching program output for users/engin/sparse_bulk_dist/sparseAdd2D (compopts: 2)] [Error matching program output for users/engin/sparse_bulk_dist/sparseBulk1D] [Error matching program output for users/engin/sparse_bulk_dist/sparseBulk2D (compopts: 1)] [Error matching program output for users/engin/sparse_bulk_dist/sparseBulk2D (compopts: 2)] [Error matching program output for users/engin/sparse_index_buffer/deinitTest] [Error matching program output for users/engin/sparse_index_buffer/sparseIndexBuffer] [Error matching program output for users/ferguson/assoc-slice] [Error matching program output for users/ferguson/resolution-bug-this] [Error matching program output for users/jglewis/badGetModule] [Error matching program output for users/npadmana/bugs/replicated_invalid_ref_return/replicated_bug] [Error matching program output for users/shetag/assoc] [Error matching program output for users/shetag/assocArrayOfArithArrayInClass] [Error matching program output for users/shetag/assocDomOfRecord] [Error matching program output for users/shetag/assocInRecord-blc] [Error matching program output for users/shetag/assocInRecord] [Error matching program output for users/shetag/assocarr] [Summary: #Successes = 13465 | #Failures = 823 | #Futures = 0] ```
vasslitvinov commented 1 year ago

A few members of the team recently expressed a preference/interest in improving compiler diagnostics over changing the syntax. Here is my rationale for this direction.

......
var r1: range;
var r2: range = 1..n by 2;
......

The case of a recursive type, i.e., figuring our whether it is generic, is surely tricky and deserves further discussion.

Chapel has historically supported both rapid prototyping and production modes. For example, it provides the ability to omit type annotations. OTOH requiring explicit annotations on nilable types is something that favors the production mode. This allows us to choose to cater to both modes by making genericity annotations optional, if we decide to introduce new ones, or to favor the production mode by making them required.

Perhaps the ultimate solution is a good blend of all the ingredients: annotations, compiler support, optionality?

vasslitvinov commented 1 year ago

Here is how I think about the approaches in the OP.

idea a# advantages range/domain w/ defaults
mark upon use 1, 3 directly where it matters helps some helps?
mark the def 4 more concise no help no help
disallow [...] fields 2, 5 addresses #16508 no help helps?

In more detail, the rows are:

Annotate the type (if it is generic) where it is used (1,3)

Annotate the entity (if it is generic) where it is declared (4)

Disallow untyped fields and fields with generic declared types (2,5)

Other considerationss

We may choose to make the chosen solution optional for prototype modules. This reduces the burden of the added verbosity.

How does each of these approaches helps or complicates program evolution, esp. when a record/class/proc changes from concrete to generic or visa versa?

mppf commented 1 year ago

Continuing https://github.com/chapel-lang/chapel/issues/19120#issuecomment-1379485723 --

Edit: With an improved warning for Approach 2, I'm seeing 823 failures out of 13465 (where any time the warning is emitted leads to a test failure, since I haven't updated any tests yet).

Branch is https://github.com/mppf/chapel/tree/warn-field-with-generic-declared-type

I've updated the branch to do two things:

With those, now I'm only seeing 31 failures in a testing run.

The second of these is a bit of a cheat, but warnings for internal/standard modules are repeated across many tests, so it's reasonable to hide them to understand the amount of code that would be affected by the warning. (Additionally, we can adjust the internal/standard module code to adhere to whatever style we think is clearest).

(Note, this branch is effectively doing a combination of Approach 1 and Approach 2 from this issue, with a warning instead of an error).

``` [Error matching program output for arrays/ferguson/array-initialization-patterns/array-initialization-patterns] [Error matching program output for classes/bradc/paramInClass/weirdParamInit3] [Error matching program output for classes/bradc/paramInClass/weirdParamInit3a] [Error matching program output for classes/bradc/paramInClass/weirdParamInit4] [Error matching compiler output for classes/delete-free/anymanaged/anymanaged-member-no-given-value-no-writeln] [Error matching compiler output for classes/delete-free/anymanaged/anymanaged-member-used-in-method] [Error matching program output for classes/delete-free/anymanaged/nilable-anymanaged-member-given-value] [Error matching compiler output for classes/delete-free/anymanaged/nilable-anymanaged-member-no-given-value] [Error matching program output for classes/delete-free/anymanaged/nonnilable-anymanaged-member-given-value] [Error matching compiler output for classes/delete-free/anymanaged/nonnilable-anymanaged-member-no-given-value] [Error matching program output for classes/delete-free/owned/bare-owned-leak] [Error matching program output for classes/delete-free/shared/linkedListExample] [Error matching program output for classes/delete-free/tests-from-design-overview/generic-collection-owned] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field-multiple] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field2-borrow] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field2-unmanaged] [Error matching program output for classes/delete-free/undecorated-generic/generic-management-field2] [Error matching program output for classes/ferguson/generic-field/generic-field-default-init] [Error matching program output for classes/ferguson/generic-field/generic-field-integral-not-inited-record] [Error matching program output for classes/ferguson/generic-field/generic-field-integral-not-inited] [Error matching program output for classes/ferguson/generic-field/generic-field-integral] [Error matching program output for classes/ferguson/generic-field/generic-field-new-owned] [Error matching program output for classes/ferguson/generic-field/generic-field-record-not-inited] [Error matching program output for classes/ferguson/generic-field/generic-field-record] [Error matching program output for classes/ferguson/generic-field/generic-field-unmanaged-borrowed] [Error matching program output for classes/ferguson/generic-field/generic-field] [Error matching program output for domains/vass/generic-domain-field] [Error: Timed out executing program mason/mason-external/libtomlc99/mason-external] [Error: Timed out executing program mason/mason-external/masonExternalRanges/mason-external-range] [Error: Timed out executing program mason/mason-help-tests/masonHelpTests] ``` (I think the mason timeouts might be an unrelated test issue).
mppf commented 1 year ago

I've created a draft PR with my warning so that we can look at the codes that changed and where the warning occurred to discuss further. The PR is #21404.

mppf commented 1 year ago

Here is a cute and/or terrifying example where whether or not a record is generic arguably depends on the point-of-instantiation.

module Library {
  // is Wrapper generic or concrete?
  record Wrapper {
    var x: fromPoi();
  }
}

module Application {
  use Library;

  proc fromPoi() type {
    return int; // ... but what if it returned integral ?
  }
  proc main() {
    var x = new Wrapper();
  }
}

See also the related issue #21426.

Edit -- in my opinion, it would be really bad for a record being generic or not is different in different parts of the code depending on point-of-instantiation details.

vasslitvinov commented 1 year ago

Here is a summary of a group meeting on 1/24.

Legend: (+) an item that is resolved, in my eyes (?) a question to be resolved

We did not discuss Approaches 1-5 aka A1-A5 directly. We discuss the following proposals:

(+) Approach B = A0 above, i.e., "do nothing", plus compiler producing better error messages with suggestions. This is a go, in addition to other actions below.

Approach A6: require ? on partial instantiations (+) yes, we want this: lots of votes in favor (?) in all contexts: I assume yes (?) warning or error: voting preference for making it an error

Approach A7: warn if no ? on fields of declared generic types (?) yes, we want this: voting preference in favor (+) warning or error: voting slightly against error (?) warn when the type is integral, class, owned etc. (?) warn in other contexts: variable declarations, formals, type aliases, etc.

(+) Approach C: the declaration record R { type elementType = int; } makes R.elementType an alias for int. This is a no-go.

Approach D: warn if no () on a generic type with all defaults (?) do we want this? voting preference in favor (?) what user problem(s) does this address? we would not want to have users write range() instead of range (+) allow R() without warning when R is concrete: voting preference against it

When the generic type is due to mem-mgmt or is given by a function: (+) A6 - applies the same way (+) A7 - yes, issue the warning (?) A7 - leaning against allowing (?) to suppress the warning (+) D does not apply

(?) We need to consider impact on range+domain genericity

My post-meeting reflections:

Having a uniform design appeals to me, ex. "anything generic has ?". Even if the cost is verbosity as in "integral(?)", "class(?)", etc. A uniform design may help with range+domain genericity.

If we require (?) when using a generic record/class, we should also require (?) when declaring it. Rationale: for easier reference. (?) at decl has negligible impact on verbosity if we already require (?) at use.

I opened #21477 to bring all the above pieces together.

vasslitvinov commented 1 year ago

As an alternative to the syntax like generic record R {...}, we could require an explicit type constructor to be the first thing inside a generic record or class. This is one of the clearest ways to indicate genericity together with informing about the parameters of genericity.

A couple of questions on this:

lydia-duncan commented 3 months ago

Similarly to #18214, I think we're not going to do anything else with this and feel as though the language is in a better state than it was when the issue was opened. Is it okay to close this issue?

mppf commented 3 months ago

I do think we have some longer-term ideas for user-defined type constructors (#21992) and additionally some of the (?) decorations might become mandatory in some cases in the future (and AFAIK missing (?) generates unstable warnings today).

In any case, the immediate problem posed by this issue is now addressed through warnings, so I agree it can be closed, and I will close it now.