Matthew Maurer
d82219a4fa
debuginfo: Set bitwidth appropriately in enum variant tags
...
Previously, we unconditionally set the bitwidth to 128-bits, the largest
an discrimnator would possibly be. Then, LLVM would cut down the constant by
chopping off leading zeroes before emitting the DWARF. LLVM only
supported 64-bit descriminators, so this would also have occasionally
resulted in truncated data (or an assert) if more than 64-bits were
used.
LLVM added support for 128-bit enumerators in llvm/llvm-project#125578
That patchset also trusts the constant to describe how wide the variant tag is.
As a result, we went from emitting tags that looked like:
DW_AT_discr_value (0xfe)
(`form1`)
to emitting tags that looked like:
DW_AT_discr_value (<0x10> fe ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 )
This makes the `DW_AT_discr_value` encode at the bitwidth of the tag,
which:
1. Is probably closer to our intentions in terms of describing the data.
2. Doesn't invoke the 128-bit support which may not be supported by all
debuggers / downstream tools.
3. Will result in smaller debug information.
2025-02-12 18:01:42 +00:00
Michael Goulet
9dc41a048d
Use ExistentialTraitRef throughout codegen
2025-01-30 15:34:00 +00:00
Zalathar
e267106104
Use gimli to get the values of DWARF constants needed by codegen
...
The `gimli` crate is already a dependency of `thorin-dwp`, which is already a
dependency of `rustc_codegen_ssa`.
2025-01-05 22:07:48 +11:00
Walnut
a1191e30b6
force enum DISCR_*
to const u64
to allow for inspection via LLDB's SBTypeStaticField::GetConstantValue()
2024-12-30 19:01:48 -06:00
Ralf Jung
397ae3cdf6
fix outdated comment
...
Co-authored-by: Camille Gillot <gillot.camille@gmail.com>
2024-12-18 11:01:54 +01:00
Ralf Jung
e023590de4
make no-variant types a dedicated Variants variant
2024-12-18 11:01:54 +01:00
Ralf Jung
21de42bf8d
Variants::Single: do not use invalid VariantIdx for uninhabited enums
2024-12-18 11:00:21 +01:00
bors
8575f8f91b
Auto merge of #104342 - mweber15:add_file_location_to_more_types, r=wesleywiser
...
Require `type_map::stub` callers to supply file information
This change attaches file information (`DIFile` reference and line number) to struct debug info nodes.
Before:
```
; foo.ll
...
!5 = !DIFile(filename: "<unknown>", directory: "")
...
!16 = !DICompositeType(tag: DW_TAG_structure_type, name: "MyType", scope: !2 , file: !5 , size: 32, align: 32, elements: !17 , templateParams: !19 , identifier: "4cb373851db92e732c4cb5651b886dd0")
...
```
After:
```
; foo.ll
...
!3 = !DIFile(filename: "foo.rs", directory: "/home/matt/src/rust98678", checksumkind: CSK_SHA1, checksum: "bcb9f08512c8f3b8181ef4726012bc6807bc9be4")
...
!16 = !DICompositeType(tag: DW_TAG_structure_type, name: "MyType", scope: !2 , file: !3 , line: 3, size: 32, align: 32, elements: !17 , templateParams: !19 , identifier: "9e5968c7af39c148acb253912b7f409f")
...
```
Fixes #98678
r? `@wesleywiser`
2024-12-03 12:49:57 +00:00
lcnr
9cba14b95b
use TypingEnv
when no infcx
is available
...
the behavior of the type system not only depends on the current
assumptions, but also the currentnphase of the compiler. This is
mostly necessary as we need to decide whether and how to reveal
opaque types. We track this via the `TypingMode`.
2024-11-18 10:38:56 +01:00
Matt Weber
8286299742
Clean up use requirements after rebasing
2024-11-06 22:26:18 -05:00
Matt Weber
21c58b1b2c
Rename option and add doc
2024-11-06 22:26:18 -05:00
Matt Weber
4692d46a46
Add additional option checks
2024-11-06 22:26:17 -05:00
Matt Weber
a4833a8089
Move additional source location info behind -Z option
2024-11-06 22:26:17 -05:00
Matt Weber
27b1b01daa
Refactor type_stub
from DefId
to tuple
2024-11-06 22:25:04 -05:00
Matt Weber
aa485fc2a1
Add file and line metadata for enum variant and fields
2024-11-06 22:25:04 -05:00
Matt Weber
af6b0deaf3
Add file and line metadata for struct/union members
2024-11-06 22:25:04 -05:00
Matt Weber
c07797a854
Add file and line metadata for coroutines
2024-11-06 22:24:58 -05:00
Matt Weber
f3da828185
Refactor type_map::stub
parameters
...
Push span lookup into `type_map::stub` and pass the `DefId` instead of
doing the lookup outside and passing in the location metadata.
2024-11-06 22:12:03 -05:00
Matt Weber
2f00b6affd
Require type_map::stub
callers to supply file information
...
This change attaches file information (`DIFile` reference and line
number) to struct debug info nodes.
Before:
```
; foo.ll
...
!5 = !DIFile(filename: "<unknown>", directory: "")
...
!16 = !DICompositeType(tag: DW_TAG_structure_type, name: "MyType", scope: !2 , file: !5 , size: 32, align: 32, elements: !17 , templateParams: !19 , identifier: "4cb373851db92e732c4cb5651b886dd0")
...
```
After:
```
; foo.ll
...
!3 = !DIFile(filename: "foo.rs", directory: "/home/matt/src/rust98678", checksumkind: CSK_SHA1, checksum: "bcb9f08512c8f3b8181ef4726012bc6807bc9be4")
...
!16 = !DICompositeType(tag: DW_TAG_structure_type, name: "MyType", scope: !2 , file: !3 , line: 3, size: 32, align: 32, elements: !17 , templateParams: !19 , identifier: "9e5968c7af39c148acb253912b7f409f")
...
```
Fixes #98678
2024-11-06 22:12:02 -05:00
Jubilee Young
b895bf4fdc
compiler: Directly use rustc_abi in codegen
2024-11-03 12:30:32 -08:00
Zalathar
4bd84b23a8
Use a type-safe helper to cast &str
and &[u8]
to *const c_char
2024-10-28 21:31:32 +11:00
Michael Goulet
c682aa162b
Reformat using the new identifier sorting from rustfmt
2024-09-22 19:11:29 -04:00
Nicholas Nethercote
a8d22eb39e
Rename supertraits of CodegenMethods
.
...
Supertraits of `BuilderMethods` are all called `XyzBuilderMethods`.
Supertraits of `CodegenMethods` are all called `XyzMethods`. This commit
changes the latter to `XyzCodegenMethods`, for consistency.
2024-09-17 10:24:43 +10:00
Matthias Krüger
110c3df7fd
Rollup merge of #126013 - nnethercote:unreachable_pub, r=Urgau
...
Add `#[warn(unreachable_pub)]` to a bunch of compiler crates
By default `unreachable_pub` identifies things that need not be `pub` and tells you to make them `pub(crate)`. But sometimes those things don't need any kind of visibility. So they way I did these was to remove the visibility entirely for each thing the lint identifies, and then add `pub(crate)` back in everywhere the compiler said it was necessary. (Or occasionally `pub(super)` when context suggested that was appropriate.) Tedious, but results in more `pub` removal.
There are plenty more crates to do but this seems like enough for a first PR.
r? `@compiler-errors`
2024-08-27 00:41:57 +02:00
Nicholas Nethercote
61627438eb
Add warn(unreachable_pub)
to rustc_codegen_llvm
.
2024-08-16 08:46:57 +10:00
beetrees
fe4fa2f1da
Use the enum2$
Natvis visualiser for repr128 C-style enums
2024-08-13 19:53:21 +01:00
Nicholas Nethercote
84ac80f192
Reformat use
declarations.
...
The previous commit updated `rustfmt.toml` appropriately. This commit is
the outcome of running `x fmt --all` with the new formatting options.
2024-07-29 08:26:52 +10:00
Jubilee Young
ce7b069fd8
compiler: Never debug_assert in codegen
...
The gains in performance are not worth the costs in correctness.
This is partly because the gains are zero and the costs are unknown.
2024-07-20 00:16:44 -07:00
Michael Goulet
333458c2cb
Uplift TypeRelation and Relate
2024-06-01 12:50:58 -04:00
beetrees
3769fddba2
Refactor float Primitive
s to a separate Float
type
2024-05-06 14:56:10 +01:00
Nicholas Nethercote
4814fd0a4b
Remove extern crate rustc_macros
from numerous crates.
2024-04-29 10:21:54 +10:00
Michael Goulet
b7d67eace7
Require coroutine kind type to be passed to TyCtxt::coroutine_layout
2024-03-24 21:12:49 -04:00
Michael Goulet
847fd88df7
Always use tcx.coroutine_layout over calling optimized_mir directly
2024-03-24 20:06:05 -04:00
Trevor Gross
e3f63d9375
Add f16
and f128
to rustc_type_ir::FloatTy
and rustc_abi::Primitive
...
Make changes necessary to support these types in the compiler.
2024-02-28 12:58:32 -05:00
Michael Goulet
fcb42b42d6
Remove movability from TyKind::Coroutine
2023-12-28 16:35:01 +00:00
Matthias Krüger
8479945c08
NFC don't convert types to identical types
2023-12-15 23:56:24 +01:00
David Wood
07931c5a08
codegen_llvm: set DW_AT_accessibility
...
Sets the accessibility of types and fields in DWARF using
`DW_AT_accessibility` attribute.
`DW_AT_accessibility` (public/protected/private) isn't exactly right for
Rust, but neither is `DW_AT_visibility` (local/exported/qualified), and
there's no way to set `DW_AT_visbility` in LLVM's API.
Signed-off-by: David Wood <david@davidtw.co>
2023-12-15 11:36:41 +00:00
Nilstrieb
21a870515b
Fix clippy::needless_borrow
in the compiler
...
`x clippy compiler -Aclippy::all -Wclippy::needless_borrow --fix`.
Then I had to remove a few unnecessary parens and muts that were exposed
now.
2023-11-21 20:13:40 +01:00
Oli Scherer
e96ce20b34
s/generator/coroutine/
2023-10-20 21:14:01 +00:00
Oli Scherer
60956837cf
s/Generator/Coroutine/
2023-10-20 21:10:38 +00:00
Michael Goulet
99969d282b
Use upvar_tys in more places, make it a list
2023-08-01 23:19:31 +00:00
Mahdi Dibaiee
e55583c4b8
refactor(rustc_middle): Substs -> GenericArg
2023-07-14 13:27:35 +01:00
Mark Rousskov
cc907f80b9
Re-format let-else per rustfmt update
2023-07-12 21:49:27 -04:00
Camille GILLOT
3a1edd8212
Store generator field names in GeneratorLayout.
2023-06-19 16:50:52 +00:00
Camille GILLOT
7d5b2e4926
Make closure_saved_names_of_captured_variables a query.
2023-06-19 16:50:52 +00:00
DonoughLiu
204bfb6a8c
Support 128-bit enum variant in debuginfo codegen
2023-06-10 03:39:24 +08:00
Maybe Waffle
e496fbec92
Split {Idx, IndexVec, IndexSlice}
into their own modules
2023-04-24 13:53:35 +00:00
Josh Soref
e09d0d2a29
Spelling - compiler
...
* account
* achieved
* advising
* always
* ambiguous
* analysis
* annotations
* appropriate
* build
* candidates
* cascading
* category
* character
* clarification
* compound
* conceptually
* constituent
* consts
* convenience
* corresponds
* debruijn
* debug
* debugable
* debuggable
* deterministic
* discriminant
* display
* documentation
* doesn't
* ellipsis
* erroneous
* evaluability
* evaluate
* evaluation
* explicitly
* fallible
* fulfill
* getting
* has
* highlighting
* illustrative
* imported
* incompatible
* infringing
* initialized
* into
* intrinsic
* introduced
* javascript
* liveness
* metadata
* monomorphization
* nonexistent
* nontrivial
* obligation
* obligations
* offset
* opaque
* opportunities
* opt-in
* outlive
* overlapping
* paragraph
* parentheses
* poisson
* precisely
* predecessors
* predicates
* preexisting
* propagated
* really
* reentrant
* referent
* responsibility
* rustonomicon
* shortcircuit
* simplifiable
* simplifications
* specify
* stabilized
* structurally
* suggestibility
* translatable
* transmuting
* two
* unclosed
* uninhabited
* visibility
* volatile
* workaround
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-04-17 16:09:18 -04:00
Scott McMurray
a2ee7592d6
Use &IndexSlice
instead of &IndexVec
where possible
...
All the same reasons as for `[T]`: more general, less pointer chasing, and `&mut IndexSlice` emphasizes that it doesn't change *length*.
2023-04-02 17:35:37 -07:00
Scott McMurray
4abb455529
Update ty::VariantDef
to use IndexVec<FieldIdx, FieldDef>
...
And while doing the updates for that, also uses `FieldIdx` in `ProjectionKind::Field` and `TypeckResults::field_indices`.
There's more places that could use it (like `rustc_const_eval` and `LayoutS`), but I tried to keep this PR from exploding to *even more* places.
Part 2/? of https://github.com/rust-lang/compiler-team/issues/606
2023-03-30 09:23:40 -07:00