Commit Graph

118 Commits

Author SHA1 Message Date
Amanieu d'Antras 632a400a36 Fix ui tests for llvm_asm! deprecation 2021-08-15 13:27:13 +01:00
bors 85109e257a Auto merge of #87581 - Amanieu:asm_clobber_abi, r=nagisa
Add support for clobber_abi to asm!

This PR adds the `clobber_abi` feature that was proposed in #81092.

Fixes #81092

cc `@rust-lang/wg-inline-asm`

r? `@nagisa`
2021-08-14 22:29:27 +00:00
bors e55c13e109 Auto merge of #87324 - asquared31415:named-asm-labels, r=Amanieu
Lint against named asm labels

This adds a deny-by-default lint to prevent the use of named labels in inline `asm!`.  Without a solution to #81088 about whether the compiler should rewrite named labels or a special syntax for labels, a lint against them should prevent users from writing assembly that could break for internal compiler reasons, such as inlining or anything else that could change the number of actual inline assembly blocks emitted.

This does **not** resolve the issue with rewriting labels, that still needs a decision if the compiler should do any more work to try to make them work.
2021-08-14 17:33:38 +00:00
Amanieu d'Antras 3fd463a5ca Add support for clobber_abi to asm! 2021-08-12 12:43:11 +01:00
Amanieu d'Antras e9fb7bada1 Fix error message typo for pure asm without outputs 2021-08-12 12:42:58 +01:00
bors 798446fe06 Auto merge of #87772 - npmccallum:naked_abi, r=Amanieu
Move naked function ABI check to its own lint

This check was previously categorized under the lint named
`UNSUPPORTED_NAKED_FUNCTIONS`. That lint is future incompatible and will
be turned into an error in a future release. However, as defined in the
Constrained Naked Functions RFC, this check should only be a warning.
This is because it is possible for a naked function to be implemented in
such a way that it does not break even the undefined ABI. For example, a
`jmp` to a `const`.

Therefore, this patch defines a new lint named
`UNDEFINED_NAKED_FUNCTION_ABI` which contains just this single check.
Unlike `UNSUPPORTED_NAKED_FUNCTIONS`, `UNDEFINED_NAKED_FUNCTION_ABI`
will not be converted to an error in the future.

rust-lang/rfcs#2774
rust-lang/rfcs#2972
2021-08-07 23:24:15 +00:00
Yuki Okushi 71ad503fd9 Rollup merge of #87742 - npmccallum:naked_ffi, r=Amanieu
Validate FFI-safety warnings on naked functions

Test that FFI-safety warnings don't get accidentally dropped on naked
functions. The big picture is that if you implement a naked function
with the Rust ABI you'll get a warning. Further, if you implement a
naked function with a standardized ABI, but use non-FFI-safe types you
will still get a warning.

rust-lang/rfcs#2774
rust-lang/rfcs#2972

cc ``````@joshtriplett`````` ``````@Amanieu`````` ``````@haraldh``````
2021-08-06 11:21:31 +09:00
asquared31415 51e414ff45 Combine spans into one error, deduplicate code 2021-08-04 17:28:55 -04:00
Nathaniel McCallum 9c0147c02d Disable unused variable lint for naked functions
In most calling conventions, accessing function parameters may require
stack access. However, naked functions have no assembly prelude to set
up stack access.  This is why naked functions may only contain a single
`asm!()` block. All parameter access is done inside the `asm!()` block,
so we cannot validate the liveness of the input parameters. Therefore,
we should disable the lint for naked functions.

rust-lang/rfcs#2774
rust-lang/rfcs#2972
2021-08-04 15:30:10 -04:00
Nathaniel McCallum 7ac0cb0ec1 Add test for naked function unused variables lint
This test proves that naked functions are treated the same as regular
functions regarding unused function parameters. We will change this
behavior in the next patch.
2021-08-04 15:29:09 -04:00
Nathaniel McCallum ba9afb58b3 Move naked function ABI check to its own lint
This check was previously categorized under the lint named
`UNSUPPORTED_NAKED_FUNCTIONS`. That lint is future incompatible and will
be turned into an error in a future release. However, as defined in the
Constrained Naked Functions RFC, this check should only be a warning.
This is because it is possible for a naked function to be implemented in
such a way that it does not break even the undefined ABI. For example, a
`jmp` to a `const`.

Therefore, this patch defines a new lint named
`UNDEFINED_NAKED_FUNCTION_ABI` which contains just this single check.
Unlike `UNSUPPORTED_NAKED_FUNCTIONS`, `UNDEFINED_NAKED_FUNCTION_ABI`
will not be converted to an error in the future.

rust-lang/rfcs#2774
rust-lang/rfcs#2972
2021-08-04 15:23:50 -04:00
asquared31415 ae8a1bafc2 Update error message 2021-08-04 13:38:17 -04:00
asquared31415 1ae19b69e8 Fix lint capitalization and ignoring, test with include_str 2021-08-04 13:38:17 -04:00
asquared31415 8e7bbc9e9d Handle leading colons properly 2021-08-04 13:38:17 -04:00
asquared31415 6f45f62ded Proper characters in labels, ignore comments 2021-08-04 13:38:17 -04:00
asquared31415 75915ad16f Lint against named asm labels 2021-08-04 13:38:17 -04:00
Nathaniel McCallum a96fd577a4 Validate FFI-safety warnings on naked functions
Test that FFI-safety warnings don't get accidentally dropped on naked
functions. The big picture is that if you implement a naked function
with the Rust ABI you'll get a warning. Further, if you implement a
naked function with a standardized ABI, but use non-FFI-safe types you
will still get a warning.

rust-lang/rfcs#2774
rust-lang/rfcs#2972
2021-08-03 17:50:50 -04:00
Nathaniel McCallum 157e0a0e8f Validate that naked functions are never inlined
Reject all uses of the inline attribute on naked functions.

rust-lang/rfcs#2774
rust-lang/rfcs#2972
2021-08-02 21:49:51 -04:00
bors 99f8efec46 Auto merge of #86416 - Amanieu:asm_clobber_only, r=nagisa
Add clobber-only register classes for asm!

These are needed to properly express a function call ABI using a clobber
list, even though we don't support passing actual values into/out of
these registers.
2021-07-11 01:06:58 +00:00
Amanieu d'Antras e1c3f5e017 Add clobber-only register classes for asm!
These are needed to properly express a function call ABI using a clobber
list, even though we don't support passing actual values into/out of
these registers.
2021-07-10 17:29:00 +02:00
Yuki Okushi 2c6268678d Move some UI tests to more suitable subdirs 2021-06-30 06:41:10 +09:00
bors e6b4c252ea Auto merge of #86599 - Amanieu:asm_raw, r=nagisa
Add a "raw" option for asm! which ignores format string specifiers

This is useful when including raw assembly snippets using `include_str!`.
2021-06-25 20:44:28 +00:00
Amanieu d'Antras d0443bb7c2 Add a "raw" option for asm! which ignores format string specifiers 2021-06-24 23:42:15 +01:00
Simonas Kazlauskas cfcb2b664d compiletest: ignore tests on a per-revision basis
Otherwise something that ought to seemingly work like `//[x86]
needs-llvm-components: x86` or `//[nll_beyond]should-fail` do not get
evaluated properly.
2021-06-24 23:13:08 +03:00
Simonas Kazlauskas 493fe8008b Re-Annotate the tests with needs-llvm-components
Doesn't work though, because compiletest doesn't process ignores on a
per-revision manner.
2021-06-24 23:13:08 +03:00
bors 7dc9ff5c62 Auto merge of #85290 - Amanieu:asm_const_int, r=nagisa
Remove support for floating-point constants in asm!

Floating-point constants aren't very useful anyways and this simplifies
the code since the type check can now be done in typeck.

cc `@rust-lang/wg-inline-asm`

r? `@nagisa`
2021-05-16 17:52:52 +00:00
Amanieu d'Antras 1605e0ec4e Fix comments in tests 2021-05-16 03:54:08 +01:00
Amanieu d'Antras f1b11939e2 Remove support for floating-point constants in asm!
Floating-point constants aren't very useful anyways and this simplifies
the code since the type check can now be done in typeck.
2021-05-14 14:58:21 +01:00
Smitty f23d231c50 Add tests where asm! is properly in unsafe block 2021-05-14 09:22:30 -04:00
Amanieu d'Antras a7ed6a5196 Fix tests 2021-05-13 23:09:54 +01:00
Amanieu d'Antras bb6bec1d55 Clarify error message when both asm! and global_asm! are unsupported 2021-05-13 22:31:58 +01:00
Amanieu d'Antras 5a229e0e20 Add tests for global_asm! 2021-05-13 22:31:58 +01:00
Aaron Hill 0dd9f118d9 Show macro name in 'this error originates in macro' message
When there are multiple macros in use, it can be difficult to tell
which one was responsible for producing an error.
2021-05-12 19:03:06 -04:00
Amanieu d'Antras eadcbb5240 Update LLVM submodule
Fixes #84025
2021-04-30 07:28:40 -07:00
bors 2e7eb85b1d Auto merge of #84099 - tmiasko:asm-only-x86_64, r=Amanieu
Check for asm support in UI tests that require it

Add `needs-asm-support` compiletest directive, and use it in asm tests
that require asm support without relying on any architecture specific
features.

Closes #84038.
2021-04-13 08:40:12 +00:00
Tomasz Miąsko da40e69b60 Check for asm support in UI tests that require it
Add `needs-asm-support` compiletest directive, and use it in asm tests
that require asm support without relying on any architecture specific
features.
2021-04-13 00:00:00 +00:00
bors c18c0ad2bc Auto merge of #84068 - Amanieu:fix_lint, r=lcnr
Add `bad_asm_style` to  HardwiredLints

This was missed when the lint was added, which prevents the lint from being ignored with `#[allow]`.
2021-04-12 10:49:39 +00:00
Amanieu d'Antras 83c2c5b98c Add test to allow bad_asm_style 2021-04-11 15:11:02 +01:00
bors da0b9b6485 Auto merge of #81942 - the8472:reduce-ui-test-threads, r=Mark-Simulacrum
reduce threads spawned by ui-tests

The test harness already spawns enough tests to keep all cores busy.
Individual tests should keep their own threading to a minimum to avoid context switch overhead.

When running ui tests with lld enabled this shaves about 10% off that testsuite on my machine.

Resolves #81946
2021-04-09 16:22:23 +00:00
The8472 27868700ec reduce threads spawned by ui-tests
the test harness already spawns enough tests for all cores, individual
tests should keep their own threading to a minimum to avoid context switch
overhead

some tests fail with 1 CGU, so explicit compile flags have been added
to keep their old behavior
2021-04-09 04:58:53 +02:00
Dylan DPC b81c6cdb57 Rollup merge of #83916 - Amanieu:asm_anonconst, r=petrochenkov
Use AnonConst for asm! constants

This replaces the old system which used explicit promotion. See #83169 for more background.

The syntax for `const` operands is still the same as before: `const <expr>`.

Fixes #83169

Because the implementation is heavily based on inline consts, we suffer from the same issues:
- We lose the ability to use expressions derived from generics. See the deleted tests in `src/test/ui/asm/const.rs`.
- We are hitting the same ICEs as inline consts, for example #78174. It is unlikely that we will be able to stabilize this before inline consts are stabilized.
2021-04-07 13:07:14 +02:00
Amanieu d'Antras 32be124e30 Use AnonConst for asm! constants 2021-04-06 12:35:41 +01:00
Amanieu d'Antras b1bcff0731 Disallow the use of high byte registes as operands on x86_64
They are still allowed on x86 though.

Fixes #83495
2021-04-05 13:38:24 +01:00
Yuki Okushi 14d0d51f6f Rollup merge of #83328 - tmiasko:asm-test, r=joshtriplett
Fixes to inline assmebly tests

* Join test thread to make assertion effective in sym.rs test case
* Use a single codegen unit to reduce non-determinism in srcloc.rs test #82886
2021-03-27 12:37:19 +09:00
Dylan DPC c5edb4f28e Rollup merge of #83485 - Amanieu:asm_llvm10, r=joshtriplett
Mark asm tests as requiring LLVM 10.0.1
2021-03-26 02:34:44 +01:00
Amanieu d'Antras 62e7331bd2 Mark inline asm tests as requiring LLVM 10.0.1 2021-03-25 20:21:58 +00:00
Amanieu d'Antras 5dabc80796 Refactor #82270 as lint instead of an error 2021-03-25 13:12:29 +00:00
asquared31415 9a9942cb23 add arm llvm requirement 2021-03-20 23:54:13 -04:00
Tomasz Miąsko 3d64f8d475 Join test thread to make assertion effective in sym.rs test case 2021-03-20 21:41:27 +01:00
Tomasz Miąsko addf680cbd Use a single codegen unit to reduce non-determinism in srcloc.rs test
When building with multiple codegen units the test case can fail with
only a subset of all errors. Use a single codegen unit as a workaround.
2021-03-20 21:41:27 +01:00