3978 Commits

Author SHA1 Message Date
Chuanqi Xu
55900a0d20 Recommit [Coroutines] Stop supportting std::experimental::coroutine_traits
As we discussed before, we should stop supporting
std::experimental::coroutine_traits in clang17. Now the clang16 is
branched so we can clean them now.

All the removed tests have been duplicated before.
2023-02-20 10:27:02 +08:00
Shafik Yaghmour
d6d59e660b [Clang] Fix __VA_OPT__ implementation so that it treats the concatenation of a non-placemaker token and placemaker token as a non-placemaker token
Currently the implementation of __VA_OPT__ will treat the concatenation of a
non-placemaker token and placemaker token as a placemaker token which is not
correct. This will fix the implementation and treat the result as a
non-placemaker token.

This fixes: https://github.com/llvm/llvm-project/issues/60268

Differential Revision: https://reviews.llvm.org/D142604
2023-02-17 14:57:32 -08:00
Aaron Ballman
4901245481 Fix Clang sphinx build
This addresses issues found in:
https://lab.llvm.org/buildbot/#/builders/92/builds/40269
2023-02-17 07:57:31 -05:00
Chuanqi Xu
6d5ea6b123 Revert "[Coroutines] Stop supportting std::experimental::coroutine_traits"
This reverts commit c4e6e771f255fb1da3d505534997b6a88195b012.

Since clang-tools-extra contains the use for
std::experimental::coroutine_traits, the previsou commit breaks the
build bot. Revert this one to make the bot green.
2023-02-17 15:50:54 +08:00
Chuanqi Xu
c4e6e771f2 [Coroutines] Stop supportting std::experimental::coroutine_traits
As we discussed before, we should stop supporting
std::experimental::coroutine_traits in clang17. Now the clang16 is
branched so we can clean them now.

All the removed tests have been duplicated before.
2023-02-17 15:35:17 +08:00
Akira Hatanaka
cda4a0e918 [Sema] Relax a failing assertion in TransformBlockExpr
The assertion fails when the expression causing the this pointer to be
captured is part of a constexpr if statement's branch and the branch
gets discarded when the enclosing method is instantiated.

Note that the test case is added to CodeGen instead of Sema since the
translation unit has to be free of errors in order for the assertion to
be checked.

Differential Revision: https://reviews.llvm.org/D144016
2023-02-16 18:40:26 -08:00
Nick Desaulniers
54186d33c3 [clang] add __has_extension(gnu_asm_goto_with_outputs_full)
Also move the line about __has_extension(gnu_asm_goto_with_outputs) so
that it is more generally about asm goto, not the paragraph on symbolic
references.

Reviewed By: efriedma, void

Differential Revision: https://reviews.llvm.org/D143205
2023-02-16 17:58:35 -08:00
Nick Desaulniers
329ef60f3e [Clang] support for outputs along indirect edges of asm goto
Initial support for asm goto w/ outputs (D69876) only supported outputs
along the "default" (aka "fallthrough") edge.

We can support outputs along all edges by repeating the same pattern of
stores along the indirect edges that we allready do for the default
edge.  One complication is that these indirect edges may be critical
edges which would need to be split. Another issue is that mid-codgen of
LLVM IR, the control flow graph might not reflect the control flow of
the final function.

To avoid this "chicken and the egg" problem assume that any given
indirect edge may become a critical edge, and pro-actively split it.
This is unnecessary if the edge does not become critical, but LLVM will
optimize such cases via tail duplication.

Fixes: https://github.com/llvm/llvm-project/issues/53562

Reviewed By: void

Differential Revision: https://reviews.llvm.org/D136497
2023-02-16 17:58:34 -08:00
Chuanqi Xu
612f3ac26f [Modules] Remove -fmodules-ts
As the diagnostic message shows, we should remove -fmodules-ts flag in
clang/llvm17. Since clang/llvm16 is already branched. We can remove the
depreacared flag now.
2023-02-16 14:40:32 +08:00
Roy Jacobson
f5aa8d191a [Clang][docs] Update the release notes page to the new skeleton
Was discussed at https://reviews.llvm.org/D142578.
2023-02-15 23:53:38 +02:00
Aaron Ballman
a9797d7d2d [C2x] Implement the unreachable macro for WG14 N2826
This exposes __builtin_unreachable as the expansion for the unreachable
macro in C2x. I added this definition under __need_STDDEF_H_misc on the
assumption there is no need for a separate need macro to control adding
this.

Differential Revision: https://reviews.llvm.org/D143430
2023-02-15 14:43:01 -05:00
KAWASHIMA Takahiro
e8d44841c5 [docs] Update the ACLE URL 2023-02-14 19:14:04 +09:00
KAWASHIMA Takahiro
6240627cfd [docs] Fix bullet list formatting
reST requires an empty line before a bullet list.
2023-02-14 19:14:03 +09:00
Chuanqi Xu
9c4f0d83f6 [docs] Add document for clang-scan-deps -format=p1689
The patches for `clang-scan-deps` have been landed. And we need to
document the behavior then.
2023-02-14 14:00:12 +08:00
Alexander Shaposhnikov
8f5d81585a [Clang][LLVM] Enable __arithmetic_fence and fprotect-parens on AArch64
Enable __arithmetic_fence and fprotect-parens on AArch64.

Test plan: ninja check-clang check-clang-tools check-llvm

Differential revision: https://reviews.llvm.org/D143781
2023-02-13 19:26:11 +00:00
Roy Jacobson
b6259eca16 [Clang] Export CanPassInRegisters as a type trait
While working on D140664, I thought it would be nice to be able to write tests
for parameter passing ABI. Currently we test this by dumping the AST and
matching the results which makes it hard to write new tests.
Adding this builtin will allow writing better ABI tests which
can help improve our coverage in this area.

While less useful, maybe some users would also find it useful for asserting
against pessimisations for their classes.

Reviewed By: erichkeane

Differential Revision: https://reviews.llvm.org/D141775
2023-02-13 19:16:23 +02:00
Tobias Hieta
877859a09b
[clang] Handle __declspec() attributes in using
This patch fixes so that declspec attributes are forwarded
to the alias declaration.

Before this patch this would assert:

class Test { int a; };
using AlignedTest = __declspec(align(16)) const Test;
static_assert(alignof(AlignedTest) == 16, "error");

But afterwards it behaves the same as MSVC does and doesn't
assert.

Fixes: llvm/llvm-project#60513

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D143632
2023-02-13 15:43:08 +01:00
Sandeep Kosuri
f4ef08433f [OPENMP][NFC] added loop bind to the support page 2023-02-10 02:33:44 -06:00
Aaron Ballman
de4321cf2c [libclang] Tweaks for clang_CXXMethod_isExplicit
This adds a release note that was accidentally dropped, and moves the
symbol from LLVM 16 to LLVM 17 in the module map.

Amends 0a51bc731bcc2c27e4fe97957a83642d93d989be
2023-02-09 09:55:11 -05:00
Mariya Podchishchaeva
2929683eef [clang][codegen] Fix emission of consteval constructor of derived type
For simple derived type ConstantEmitter returns a struct of the same
size but different type which is then stored field-by-field into memory
via pointer to derived type. In case base type has more fields than derived,
the incorrect GEP is emitted. So, just cast pointer to derived type to
appropriate type with enough fields.

Fixes https://github.com/llvm/llvm-project/issues/60166

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D142534
2023-02-09 04:43:48 -05:00
Ramon de C Valle
71c7313f42 Add CFI integer types normalization
This commit adds a new option (i.e.,
`-fsanitize-cfi-icall-normalize-integers`) for normalizing integer types
as vendor extended types for cross-language LLVM CFI/KCFI support with
other languages that can't represent and encode C/C++ integer types.

Specifically, integer types are encoded as their defined representations
(e.g., 8-bit signed integer, 16-bit signed integer, 32-bit signed
integer, ...) for compatibility with languages that define
explicitly-sized integer types (e.g., i8, i16, i32, ..., in Rust).

``-fsanitize-cfi-icall-normalize-integers`` is compatible with
``-fsanitize-cfi-icall-generalize-pointers``.

This helps with providing cross-language CFI support with the Rust
compiler and is an alternative solution for the issue described and
alternatives proposed in the RFC
https://github.com/rust-lang/rfcs/pull/3296.

For more information about LLVM CFI/KCFI and cross-language LLVM
CFI/KCFI support for the Rust compiler, see the design document in the
tracking issue https://github.com/rust-lang/rust/issues/89653.

Relands b1e9ab7438a098a18fecda88fc87ef4ccadfcf1e with fixes.

Reviewed By: pcc, samitolvanen

Differential Revision: https://reviews.llvm.org/D139395
2023-02-08 22:24:19 +00:00
Chuanqi Xu
1782e8f9e8 [C++20] [Modules] Allow -fmodule-file=<module-name>=<BMI-Path> for implementation unit and document the behavior
Close https://github.com/llvm/llvm-project/issues/57293.

Previsouly we can't use `-fmodule-file=<module-name>=<BMI-Path>` for
implementation units, it is a bug. Also the behavior of the above option
is not tested nor documented for C++20 Modules. This patch addresses the
2 problems.
2023-02-08 16:45:00 +08:00
Joshua Batista
836249b1c2 Add codegen for llvm log2/log10 elementwise builtins
Add codegen for llvm log2 / log10 elementwise builtin
The log2/log10 elementwise builtin is necessary for HLSL codegen.
Tests were added to make sure that the expected errors are encountered when these functions are given inputs of incompatible types.
The new builtins are restricted to floating point types only.

Reviewed By: fhahn

Differential Revision: https://reviews.llvm.org/D143207
2023-02-07 12:23:48 -08:00
Tom Eccles
cc14bf22bd [flang] add a pass to move array temporaries to the stack
This pass implements the `-fstack-arrays` flag. See the RFC in
`flang/docs/fstack-arrays.md` for more information.

Differential revision: https://reviews.llvm.org/D140415
2023-02-07 10:27:52 +00:00
Simon Pilgrim
6c8fe96582 [Support] Move ItaniumManglingCanonicalizer and SymbolRemappingReader from Support to ProfileData
As mentioned on https://discourse.llvm.org/t/issues-in-llvm-tblgen-high-parallelized-build/68037, ItaniumManglingCanonicalizer is often slow to build, resulting in a bottleneck for distributed builds while waiting for LLVMSupport to complete.

SymbolRemappingReader is the only current user of ItaniumManglingCanonicalizer, and this is only used by ProfileData and llvm-cxxmap - so I propose we move both files into the ProfileData library.

Differential Revision: https://reviews.llvm.org/D143318
2023-02-06 20:55:48 +00:00
Pratik Sharma
d041833f55 Fix broken link to CxxCodeBrowser in External Clang Examples
Replaced the dead link with the correct link in ExternalClangExamples.rst

Differential Revision: https://reviews.llvm.org/D143343
Fixes https://github.com/llvm/llvm-project/issues/60142
2023-02-06 09:12:58 -05:00
Backl1ght
c24cdd58a1 [clang-format] PackConstructorInitializers support PCIS_OnlyNextLine
fixes https://github.com/llvm/llvm-project/issues/60241

Differential Revision: https://reviews.llvm.org/D143091
2023-02-06 19:39:05 +08:00
Fangrui Song
26182dfa36 [docs] Replace deprecated -target with --target= 2023-02-05 16:34:22 -08:00
Jordan Rupprecht
74ce297045 Revert "[Clang] Implement Change scope of lambda trailing-return-type"
This reverts commit d708a186b6a9b050d09558163dd353d9f738c82d (and typo fix e4bc9898ddbeb70bc49d713bbf863f050f21e03f). It causes a compilation error for this:

```
struct StringLiteral {
  template <int N>
  StringLiteral(const char (&array)[N])
      __attribute__((enable_if(N > 0 && N == __builtin_strlen(array) + 1,
                               "invalid string literal")));
};

struct Message {
  Message(StringLiteral);
};

void Func1() {
  auto x = Message("x");  // Note: this is fine

  // Note: "xx\0" to force a different type, StringLiteral<3>, otherwise this
  // successfully builds.
  auto y = [&](decltype(Message("xx"))) {};

  // ^ fails with: repro.cc:18:13: error: reference to local variable 'array'
  // declared in enclosing function 'StringLiteral::StringLiteral<3>'

  (void)x;
  (void)y;
}
```

More details posted to D124351.
2023-02-03 08:49:34 -08:00
ManuelJBrito
450a4612c3 [Clang] Add builtin_nondeterministic_value
Differential Revision: https://reviews.llvm.org/D142388
2023-02-03 09:47:46 +00:00
Owen Pan
4f37de9c91 [clang-format][doc] Fix a typo 2023-02-03 00:24:54 -08:00
Mitch Phillips
b88ebb3d94 Revert "Add CFI integer types normalization"
This reverts commit b1e9ab7438a098a18fecda88fc87ef4ccadfcf1e.

Reason: Looks like it broke the MSan buildbot, more details in the
phabricator review: https://reviews.llvm.org/D139395
2023-02-02 15:48:50 -08:00
Joshua Batista
a11a6752c1 Repair sphinx doc generation
mistake in the log commit neglected to place a space after the `` literal,
which messed up the build by incapacitating the sphinx generator.

Reviewed By: beanz

Differential Revision: https://reviews.llvm.org/D143208
2023-02-02 12:33:53 -08:00
Tom Honermann
ecd0be100b [clang] Warn by default that implicit capture of 'this' is deprecated in C++20 and later.
Previously, a warning that C++20 deprecated implicit capture of 'this' for
lambda captures specified with a capture default of '=' was only issued when
'-Wdeprecated' or '-Wdeprecated-this-capture' was specified. This change
enables the warning by default (it is still only issued when compiling for
C++20 or later). This is consistent with gcc which warns by default (MSVC
requires '/Wall').

Reviewed By: erichkeane, shafik

Differential Revision: https://reviews.llvm.org/D142639
2023-02-02 15:10:47 -05:00
Joshua Batista
26eb70820f Add builtin_elementwise_log
Add codegen for llvm log elementwise builtin
The log elementwise builtin is necessary for HLSL codegen.
Tests were added to make sure that the expected errors are encountered when these functions are given inputs of incompatible types.
The new builtin is restricted to floating point types only.

Reviewed By: beanz

Differential Revision: https://reviews.llvm.org/D140489
2023-02-02 11:36:22 -08:00
Craig Topper
089bfedfb8 [RISCV][Driver] Add -mrvv-vector-bits= option similar to -msve-vector-bits=
This option will control the vscale min/max.

I have left out the '+' support that SVE supports for now. We already
have minimum controlled by the Zvl*b extension so this didn't seem that
useful.

I've added "scalable" from SVE to allow the option to be cancelled later on
command line. Though this name might make less sense for RISC-V since
the word "scalable" does not appear in the V spec. Maybe something like
"unknown" or "runtime" or "variable" would be better?

In addition to "scalable", 64, 128, 256, 512, ..., 65536, I have added an extra
value "zvl" that will use the value from Zvl*b as the min and max.
This avoids repeating the numeric value in two places or to get
min/max from -mcpu.

The primary effect of this option today is simplification of stack
address calculations for RVV vectors and avoiding the use of
vrgatherei16 in some cases if we know there are less than 256 elements.

Future patches may add something similar to the arm_sve_vector_bits
attribute to allow RVV vectors to be used in structs and global
variables.

Reviewed By: frasercrmck

Differential Revision: https://reviews.llvm.org/D142144
2023-02-02 10:32:14 -08:00
Mariya Podchishchaeva
fe082124fa [clang][driver] Emit an error for /clang:-x
`/clang:-x` emits an error instead of a warning. And if the error is suppressed,
`/clang:-x` takes no effect.
Considering that `/clang:` is a recent addition in 2018-11 and there are MSVC
style alternatives, therefore `/clang:-x` doesn't seem useful and we just reject
it since properly supporting it would add lots of complexity.

Fixes #59307

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D142757
2023-02-02 11:48:33 -05:00
Nico Weber
adf7ffd51e Revert "[Clang] Add builtin_nondeterministic_value"
This reverts commit 4a1832a5c801a61bf4c30891aaebe63993712fd9.
Test fail on (at least) macOS and Windows, see
https://reviews.llvm.org/D142388#4099441
2023-02-02 08:59:27 -05:00
ManuelJBrito
4a1832a5c8 [Clang] Add builtin_nondeterministic_value
Differential Revision: https://reviews.llvm.org/D142388
2023-02-02 11:14:17 +00:00
Shivam Gupta
897e345042 Revert "[Clang] Add -Wtype-limits to -Wextra for GCC compatibility"
This reverts commit 95668c0d97e6184729f3a3e9621a58d9edffb6b0.

This discovers a warning in
https://reviews.llvm.org/rGa68d4b11465f5b3326be1dd820f59fac275b7581.

and broke the x86_64-linux sanitizer
buildbot: https://lab.llvm.org/buildbot/#/builders/37/builds/19910.
2023-02-02 05:59:27 +05:30
Owen Pan
25e2d0f3c8 [clang-format] Support clang-format on/off line comments as prefix
Closes #60264.

Differential Revision: https://reviews.llvm.org/D142804
2023-02-01 13:07:09 -08:00
Felipe de Azevedo Piovezan
f84d30e172 Reland "[codegen] Store address of indirect arguments on the stack"
The commit was reverted due to a regression in debug information of an
optimized code test in lldb. This has since been addressed by:

1. rGf753e5be8239: [LiveDebugValues] Allow EntryValue with OP_deref
expressions
2. rG055f2f04e658: [mem2reg][debuginfo] Handle op_deref when converting
dbg.declare

Differential Revision: https://reviews.llvm.org/D141381
2023-02-01 13:07:47 -05:00
Ramon de C Valle
b1e9ab7438 Add CFI integer types normalization
This commit adds a new option (i.e.,
`-fsanitize-cfi-icall-normalize-integers`) for normalizing integer types
as vendor extended types for cross-language LLVM CFI/KCFI support with
other languages that can't represent and encode C/C++ integer types.

Specifically, integer types are encoded as their defined representations
(e.g., 8-bit signed integer, 16-bit signed integer, 32-bit signed
integer, ...) for compatibility with languages that define
explicitly-sized integer types (e.g., i8, i16, i32, ..., in Rust).

``-fsanitize-cfi-icall-normalize-integers`` is compatible with
``-fsanitize-cfi-icall-generalize-pointers``.

This helps with providing cross-language CFI support with the Rust
compiler and is an alternative solution for the issue described and
alternatives proposed in the RFC
https://github.com/rust-lang/rfcs/pull/3296.

For more information about LLVM CFI/KCFI and cross-language LLVM
CFI/KCFI support for the Rust compiler, see the design document in the
tracking issue https://github.com/rust-lang/rust/issues/89653.

Reviewed By: pcc, samitolvanen

Differential Revision: https://reviews.llvm.org/D139395
2023-02-01 17:48:03 +00:00
Shivam Gupta
95668c0d97 [Clang] Add -Wtype-limits to -Wextra for GCC compatibility
GCC added the -Wtype-limits warning group to -Wextra around
GCC 4.4 and the group has some very helpful extra warnings
like tautological comparison type limit warnings
(comparingan unsigned int to see if it's positive, etc).

Fix https://github.com/llvm/llvm-project/issues/58375

Reviewed By: #clang-vendors, thesamesam

Differential Revision: https://reviews.llvm.org/D142826
2023-02-01 19:29:16 +05:30
Simon Tatham
60ea6f35a2 [ARM] Allow selecting hard-float ABI in integer-only MVE.
Armv8.1-M can be configured to support the integer subset of the MVE
vector instructions, and no floating point. In that situation, the FP
and vector registers still exist, and so do the load, store and move
instructions that transfer data in and out of them. So there's no
reason the hard floating point ABI can't be supported, and you might
reasonably want to use it, for the sake of intrinsics-based code
passing explicit MVE vector types between functions.

But the selection of the hard float ABI in the backend was gated on
Subtarget->hasVFP2Base(), which is false in the case of integer MVE
and no FP.

As a result, you'd silently get the soft float ABI even if you
deliberately tried to select it, e.g. with clang options such as
--target=arm-none-eabi -mfloat-abi=hard -march=armv8.1m.main+nofp+mve

The hard float ABI should have been gated on the weaker condition
Subtarget->hasFPRegs(), because the only requirement for being able to
pass arguments in the FP registers is that the registers themselves
should exist.

I haven't added a new test, because changing the existing
CodeGen/Thumb2/float-ops.ll test seemed sufficient. But I've added a
comment explaining why the results are expected to be what they are.

Reviewed By: lenary

Differential Revision: https://reviews.llvm.org/D142703
2023-02-01 09:05:12 +00:00
Sergei Barannikov
a7fbca4080 [NFC] Extract CodeGenInstAlias into its own *.h/*.cpp
Differential Revision: https://reviews.llvm.org/D142968
2023-02-01 05:23:43 +03:00
Rashmi Mudduluru
acc3cc69e4 [-Wunsafe-buffer-usage] Introduce the unsafe_buffer_usage attribute
Differential Revision: https://reviews.llvm.org/D138940
2023-01-31 11:43:34 -08:00
Shafik Yaghmour
67ee18cc7a [Clang] Add machinery to catch overflow in unary minus outside of a constant expression context
We provide several diagnostics for various undefined behaviors due to signed
integer overflow outside of a constant expression context. We were missing the
machinery to catch overflows due to unary minus.

Fixes: https://github.com/llvm/llvm-project/issues/31643

Differential Revision: https://reviews.llvm.org/D142867
2023-01-31 09:35:12 -08:00
Corentin Jabot
e4bc9898dd [Clang] Fix typo in ReleaseNotes.rst 2023-01-31 11:19:44 +01:00
Corentin Jabot
d708a186b6 [Clang] Implement Change scope of lambda trailing-return-type
This implements P2036R3 and P2579R0.
That is, explicit, int, and implicit capture become visible
at the start of the parameter head.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D124351
2023-01-31 11:06:14 +01:00