Commit Graph
1311 Commits
Author SHA1 Message Date
Jon Ross-Perkins eac7c2bda4 Automate the addition of RUN and simplify RUN lines (#2292)
This was an offshoot of the discussion about how much boilerplate we could remove. lit requires RUN lines be there, everything else is optional.
2022-10-17 13:52:37 -07:00
Chandler Carruth a3ff9aee6d Remove the use of -fast-isel with LLVM. (#2298)
This had already hit one bug in LLVM, and now I've hit another:
https://github.com/llvm/llvm-project/issues/58385

Since this isn't specific to a config, and it seems to be a clear sign
that this isn't the best tested path, let's just drop to the more fully
tested flags. Probably should have done this rather than the more
targeted workaround last time...
2022-10-17 08:24:19 -07:00
Jon Ross-Perkins bb521fdd5b Switch the parse tree tests to lit (#2289)
This switch is being done in order to make it easier to update tests when the parse tree structure changes. I've been spending a lot of time doing such updates as part of refactoring the parse tree, and I expect more, so that's really at the root of all the refactoring I've been doing to lit updates.
2022-10-13 15:54:37 -07:00
a3329cf004 Diagnose uses of declarations that are too early. (#2288)
There are lots of ways a declaration can be used before we have the information necessary to handle that use. Issue diagnostics for these.

Interleave declaration and type-checking of global declarations so that declaring a later declaration can depend on the results of type-checking an earlier one.

Incorporates tests added in #2266.

Fixes #1394, fixes #1395, fixes #1396.

Co-authored-by: pmqtt <51272730+pmqtt@users.noreply.github.com>
Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
2022-10-13 15:30:29 -07:00
Jon Ross-Perkins e111418b32 Merge and label stdout/stderr for FileCheck (#2283)
Adds a simple script to merge stdout/stderr and put on labels. This is hidden to the RUN line using lit.cfg.py.

This is my solution to addressing how errors printed by the toolchain break sorting of stdout output; just put stdout first. We could also have toggles for interleaving output or such, which might help test whether we do it properly.

This also moves some previous-distributed replacement logic into lit_autoupdate_base.py: I think having that adjacent to lit.cfg.py is probably the better choice, and it reduces duplication in toolchain scripts. It happens here because I need to change the resulting commands to include the merge.
2022-10-13 14:46:30 -07:00
Richard Smith b1c50bd6a7 Revert "Fix: Issue #1394 (#2266)" (#2285)
This change left a test broken and removed a fair amount of test coverage for unrelated features, and after further discussion it's not clear that this is the direction we want to go in.

This reverts commit 6cf2272bbe.
2022-10-13 12:15:56 -07:00
6cf2272bbe Fix: Issue #1394 (#2266)
* start correct

* Fix #1394

* remove llvm::outs()

* Fix #1394

* ---

* fix issue-1394

* fix issue-1394

* Update explorer/interpreter/interpreter.cpp

Co-authored-by: Geoff Romer <gromer@google.com>

* fix issue-1394

* remove and rename test files

* add changes from j.m

Co-authored-by: m new <michael.burzan@outlook.de>
Co-authored-by: Geoff Romer <gromer@google.com>
2022-10-13 19:44:53 +02:00
Richard Smith e74c73240c Factor out duplicated code converting type-of-types to ConstraintType. (#2282) 2022-10-13 09:11:22 -07:00
Richard Smith 8c86fe846a Avoid unnecessary vector copies when parsing lists. (#2281)
No functional change intended, but these parsing actions should now be linear-time instead of quadratic-time.

As requested in review of #2279.
2022-10-13 08:58:21 -07:00
Jon Ross-Perkins 418b28d12b Fix filter step reference (#2273)
* Fix filter step reference

* pipe
2022-10-12 17:45:33 -07:00
Jon Ross-Perkins b374595930 Fix an issue with running as ../lit_autoupdate.py (#2280)
I think this was an issue before too, apparently I'm just running in new ways?
2022-10-12 17:44:21 -07:00
Richard Smith 7f7b9a4086 Implement support for extends and impl as declarations in interfaces (#2279) 2022-10-12 17:13:25 -07:00
Jon Ross-Perkins 55e124a667 Refactor update_checks into a more generic lit_autoupdate (#2277)
I've refactored the script in order to make it work in more contexts, which is why the delta is lost. I've actually refactored a significant amount with the intent of making the logic easier to understand, because I was also adjusting bits of it.

Some key notes:

- Removes the multi-pass update that was dealing with unfixed line numbers in explorer (I think the current script should work in one pass)
  - Fixed explorer to handle multiple line numbers on the same line (turns out we can rely on local format for line numbers).
- Using execv instead of imports because making Python imports work in a setup like this feels like it's not worth it; only a nuisance.
- Adding __init__.py to satisfy mypy, which otherwise considers the lit_autoupdate.py scripts to be issues.
- Using py because I was thinking sh would be more platform-dependent. py should port better to Windows.
- Getting rid of [[ID#]] capture groups in the semantics-ir tests because with the autoupdate it's kind of moot (also, hard to autogenerate the pairs without relying on the %### value).

Note this does mean tests switch to more of a "make a change, see which tests change" setup. I don't know that that's a _bad_ thing though -- it's pretty much how tests are being written right now, which is why I went down this rabbit hole. It's a nuisance to make a change then _manually_ have to update a bunch of code.

My intent is to use this for to convert parse-tree tests to lit, but I wanted to do this with _existing_ tests first as a proof of concept and to make sure there's agreement.
2022-10-12 15:01:38 -07:00
Richard Smith 61552a788b Bring constraints for an associated constant into scope within the interface (#2278)
This allows us to write code within an interface that assumes its associated types satisfy their constriants.
2022-10-12 13:21:00 -07:00
Richard Smith 9f534ae004 Implement support for rewrite constraints (#2276)
Implements basic support for rewrite constraints as proposed in #2173.

Support for associated constants and complex constraints in general is also made more robust: argument deduction now properly computes and substitutes witnesses, and interface declarations track a more correct description of the constraint that they introduce than the one we previously built.
2022-10-12 12:55:55 -07:00
Richard Smith 9feff92f22 Track witnesses wherever possible (#2263)
Change explorer's handling of witnesses to track them wherever possible. Associated constant support needs witnesses to be available much more pervasively.

The main changes here are:

-   `Substitute` now takes a set of bindings covering both `Value`s for `GenericBinding`s and `Witness`es for `ImplBinding`s, and substitutes both.
-   Witnesses are now tracked within `ConstraintType`s. The `.Self` type has an `ImplBinding` that self-references from parts of the constraint to other parts of the constraint can use to access the witness for the constraint.
-   The constraint type for an `impl` and for a `GenericBinding` are now stored in pre-substituted form, with references to the actual constrained type rather than symbolic references to `.Self`. This results in minor changes in diagnostic text.

Argument deduction still performs substitutions without remapping witnesses.
2022-10-11 15:20:23 -07:00
Kareem Ergawyandergawy 05b6c4f310 Fix a few typos in generics docs. (#2272)
Fixes a few tiny typos here and there.

Co-authored-by: ergawy <kareem.ergawy@guardsquare.com>
2022-10-07 09:31:38 -07:00
Jon Ross-Perkins b9d3d9a3df Unify lit.cfg.py approach (#2249)
On #2224 @zygoloid pointed out we needed --implicit-check-not to ensure we were correctly matching output. This is the standard way we're writing explorer tests, so I was looking at unifying our lit approaches.

This is one take on it, making more use of substitutions to bring various testing into alignment, as well as symlinks to avoid config skew (maybe I'll eventually figure out a better solution than symlinks).

Makes a couple small fixes in explorer to remove end-of-line whitespace on output.
2022-10-06 12:25:23 -07:00
Jon Ross-Perkins 495d75a394 Switch to clang-format 14.0.6 (#2253)
14.0.6 is the latest release at https://pypi.org/project/clang-format/#history, hopefully 15.0.0 will be out soon. Looks like ssciwr/clang-format-wheel#49 is noting issues for this particular release process though.
2022-10-06 12:19:24 -07:00
Jon Ross-Perkins 0b9bda10b7 Refactor common main logic (#2260)
1) toolchain and explorer use the same working dir logic, share it
2) explorer's carbon.cpp and main_bin.cpp use the same relative path logic, share it
3) You can append a longer path in one call with the right kind of iterator
4) Fix what's maybe a bug in passing `relative_prelude_path.str()` to `cl::init`
5) Collapse Main and ExplorerMain to avoid passing more parameters between
2022-10-05 17:34:04 -07:00
Richard Smith 4785201d80 Remove SetConstantValue and collection of a set of constants. (#2259)
The only usage of this set is to include this list in trace output when
tracing type-checking of patterns. But that in turn seems arbitrary and
not useful.
2022-10-05 17:30:27 -07:00
Geoff Romer be961dca3a Update and clarify error documentation (#2262) 2022-10-05 13:23:39 -07:00
Kareem Ergawyandergawy dc43767b16 Fix a small typo in the driver help message. (#2261)
The help message was using `_`s while the actual sub-commands use `-`.

Co-authored-by: ergawy <kareem.ergawy@guardsquare.com>
2022-10-05 09:23:18 -07:00
Richard Smith 8f0f69b65f Remove RuntimeError / CompilationError. (#2258)
Instead, work out the prefix for an error based on whether it was produced during parsing, semantic analysis, or when running the program.
2022-10-04 15:39:04 -07:00
Richard Smith c703c89658 Allow explorer to be run directly from the bazel build directory. (#2257)
Previously explorer worked under `bazel run` but not when run directly, because it was finding the prelude relative to the current working directory. Now it looks for it relative to the location of the binary, so it works both when run directly and when run with `bazel run`.
2022-10-04 14:48:15 -07:00
Richard Smith e172c0a581 Add test for member access into symbolic witness. (#2256)
Add missing test requested by @jonmeow in review of #2250.
2022-10-04 12:51:02 -07:00
Jon Ross-Perkins 1524becc4f Make the toolchain binary work better with bazel run. (#2252)
Makes the toolchain binary work with `bazel run` and relative paths, such as:

bazel run //toolchain/driver:carbon -- dump semantics-ir empty.carbon
2022-10-04 12:37:18 -07:00
Richard Smith 2340cb6703 Build value representations for all kinds of witness (#2250)
Instead of forming a `SymbolicWitness` that contains an `Expression` when we can't directly resolve a witness to an `impl`, form different kinds of `Witness` values for the various situations:

- A `BindingWitness` witnesses that a type implements a constraint by reference to an `ImplBinding`.
- A `ConstraintWitness` witnesses that a type implements a constraint by reference to witnesses for each of the impl constraints within the constraint.
- A `ConstraintImplWitness` witnesses that a type implements a constraint by reference to a larger constraint which contains that constraint as an impl constraint.

Remove `SymbolicWitness` values and `InstantiateImpl` expressions, which are now unused. In order to remove the final usage of `SymbolicWitness`, I fixed a TODO to give `Self` the proper type within an interface declaration. I don't think this is an observable change.

No functional change intended.
2022-10-04 12:14:52 -07:00
Adrien Leravat 8e8e8ced60 docs: fix code sample typo (#2254)
Fix small typo in classes documentation
Added to a decicated PR to keep things orderly
2022-10-04 08:57:10 -07:00
Richard Smith 04d49cebd8 Consistently use a Witness rather than an expression to represent a possibly-symbolic witness. (#2245)
Previously we used an expression in some places and a `Witness` values in others. The eventual goal is to make `Witness` values behave like other symbolic values such as `NominalClassType`, but the first step is to consistently treat them like values rather than expressions.

No functionality change intended.
2022-10-03 14:00:41 -07:00
Jon Ross-Perkins c198dafbe8 Switch semantics-ir tests to lit (#2224)
This builds on semantics-ir lit support added by #2222
 
The googletest setup was feeling cumbersome, especially as I'm thinking about how to add more testing: I feel like I'm wrestling with the infrastructure.

The `[[ID1]]` and so on in tests is one advantage of switching: it's easier to do matching of IDs for verification. This is also more agnostic about the numbers than before, something which I'm concerned will be important as I think about builtins.

To explain my builtins thought, I think that needs to be another SemanticsIR with basically names pointing at builtin things. But this (a) creates multiple SemanticsIRs, which would confuse the current singleton approach and (b) starts creating more fluctuation for IDs, potentially impacting the numbers used (also, chandlerc's suggested pointers for some use-cases).

Overall it felt like I was heading towards a situation with googletest where writing the tests would be really difficult, and it was adding to my hesitance to write more code in the toolchain. I'm hoping this acts as a simplification.

Note, the "cp" commit has some incremental changes to googletest that I'd considered for making it easier to add matchers, but ultimately I ended up with this outcome.
2022-10-03 13:09:04 -07:00
8d5d48a4a7 [toolchain][parser] Parse for statement. (#2180)
Summary:

Add support for parsing `for` loops.

Co-authored-by: ergawy <kareem.ergawy@guardsquare.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-10-03 08:36:19 -07:00
Jon Ross-Perkins 11a138b467 Fix things up to make running clang-tidy easier. (#2246)
run_clang_tidy.py (the clang-tools-extras version) is parallel so should be feasible to work with. I'm trying to codify this mainly because finding out the right invocation can be difficult.

This fixes some loading of re2 and proto that's started to become an issue.

It's hard to see actual issues because of the identifier length warning being turned off in #2244, and just general issue creep. There may be more fixes to do but this should still be an improvement.
2022-09-30 18:15:16 -07:00
Jon Ross-Perkins ba226454d0 Disable readability-identifier-length in clang-tidy (#2244)
https://clang.llvm.org/extra/clang-tidy/checks/readability/identifier-length.html

This complains about `id` which I'm using a lot and feels like a reasonable name, and honestly single-letter variable names seem reasonable in certain contexts. Trying to make this work better doesn't seem like it'll be worth the time cost.
2022-09-30 17:01:48 -07:00
Geoff Romer 96735e89b8 Clarify that l-values and r-values are expressions (#2243) 2022-09-30 13:34:11 -07:00
Jon Ross-PerkinsandRichard Smith 1e1fa9295d Rewrite contribution tools documentation (#2203)
Key rewrite points:

- Making more use of apt now, since we no longer need `brew` for llvm on Linux.
  - Gets ahead of issues with brew's llvm 15 on Linux.
- Clear list of commands for a typical setup.
- Less verbose text about various tool options (I think this was just too much).

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-09-30 13:21:27 -07:00
Geoff Romer f7fd5656f0 Remove support for curly-braced "receiver" syntax (#2220) 2022-09-30 12:36:35 -07:00
Jon Ross-Perkins 9b03367449 Remove duplicate template (#2239) 2022-09-30 10:33:11 -07:00
Jon Ross-Perkins b0060e5cfb Rename issue template yaml to yml (#2233)
The config.yaml doesn't seem to be getting seen. Judging by https://github.com/carbon-language/carbon-lang/tree/trunk/.github/ISSUE_TEMPLATE ("Customize the issue creation experience with a config.yml file.") I think yaml is allowed for a lot of things (including the templates) but not config.yml.

I'm renaming other files for consistency.
2022-09-30 10:14:04 -07:00
Jon Ross-Perkins b94c496aee Fix incomplete TODO in driver (#2231)
From #2222
2022-09-30 08:10:10 -07:00
Jon Ross-Perkins df829f9ad4 Add a doc issue template (#2234) 2022-09-29 14:58:10 -07:00
Jon Ross-Perkins 768764787f Fix x/_ and y/z in faq example. (#2230) 2022-09-29 10:52:05 -07:00
Jon Ross-Perkins af92a1d2ab Add some issue templates (#2225)
ref: https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository

example of how this is supposed to look: https://github.com/flutter/flutter/issues/new/choose
2022-09-29 10:25:34 -07:00
Jon Ross-Perkins 80570e1a5b Modify the driver to support using for semantics IR testing (#2222)
This unifies `dump-tokens` and `dump-parse-tree` so that we don't keep writing basically the same code repeatedly.

I'll need to modify the output of SemanticsIR::Print more, and may soon unify printing multiple IRs this way (particularly including the builtins SemanticsIR) but this is intended to offer a starting point.

I may eventually try to unify lit.cfg.py files, but I was thinking about whether that works in various contexts we may run in and eventually decided copying the driver/testdata/lit.cfg.py file would be the easiest solution.
2022-09-28 17:40:57 -07:00
Jon Ross-Perkins 59b0ac1616 Remove copyright from PR template (#2227)
The template gets inserted into the PR description verbatim, copyright included, which wasn't my intent.
2022-09-28 16:25:03 -07:00
Jon Ross-Perkins 094408935c Add a skeletal PR template (#2226)
e.g. https://github.com/flutter/flutter/blob/master/.github/PULL_REQUEST_TEMPLATE.md

But I feel weird adding a checklist
2022-09-28 16:06:30 -07:00
Geoff Romer 9b1a32b7b7 Miscellaneous code of conduct clarifications (#2219) 2022-09-27 12:01:06 -07:00
josh11bandBarry Revzin 29d8f9845e Clarifications to "checked and template parameters" (#2216)
This attempts to address concerns that @brevzin first tried to fix in #1443 .

Co-authored-by: Barry Revzin <barry.revzin@gmail.com>
2022-09-26 16:57:03 -07:00
pmqtt cfa295c0af Feature destructor (#2116) 2022-09-26 10:11:05 -07:00
micttyl c63ae9b05d Prefix Fail to Failing Test (#2212) 2022-09-24 11:40:08 -07:00