Commit Graph

67515 Commits

Author SHA1 Message Date
Kees Cook aef03c9b3b [clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
GCC 12 has been released and contains unconditional support for
-ftrivial-auto-var-init=zero:
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init

Maintain compatibility with GCC, and remove the -enable flag for "zero"
mode. The flag is left to generate an "unused" warning, though, to not
break all the existing users. The flag will be fully removed in Clang 17.

Link: https://github.com/llvm/llvm-project/issues/44842

Reviewed By: nickdesaulniers, MaskRay, srhines, xbolva00

Differential Revision: https://reviews.llvm.org/D125142
2022-10-01 18:45:45 -07:00
Kazu Hirata 9d0d4046c0 [clang] Use std::enable_if_t (NFC) 2022-10-01 17:24:54 -07:00
David Green d7804e187a [Clang] Move ParsedTargetAttr to TargetInfo.h
This moves the struct, as it is now parsed by TargetInfo, so avoiding
some includes of AST in Basic.
2022-10-01 18:26:42 +01:00
David Green 781b491bba [Clang][AArch64] Support AArch64 target(..) attribute formats.
This adds support under AArch64 for the target("..") attributes. The
current parsing is very X86-shaped, this patch attempts to bring it line
with the GCC implementation from
https://gcc.gnu.org/onlinedocs/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes.

The supported formats are:
- "arch=<arch>" strings, that specify the architecture features for a
  function as per the -march=arch+feature option.
- "cpu=<cpu>" strings, that specify the target-cpu and any implied
  atributes as per the -mcpu=cpu+feature option.
- "tune=<cpu>" strings, that specify the tune-cpu cpu for a function as
  per -mtune.
- "+<feature>", "+no<feature>" enables/disables the specific feature, for
  compatibility with GCC target attributes.
- "<feature>", "no-<feature>" enabled/disables the specific feature, for
  backward compatibility with previous releases.

To do this, the parsing of target attributes has been moved into
TargetInfo to give the target the opportunity to override the existing
parsing. The only non-aarch64 change should be a minor alteration to the
error message, specifying using "CPU" to describe the cpu, not
"architecture", and the DuplicateArch/Tune from ParsedTargetAttr have
been combined into a single option.

Differential Revision: https://reviews.llvm.org/D133848
2022-10-01 15:40:59 +01:00
Emilia Dreamer 1fa115b569
[clang-format] Correctly indent closing brace of compound requires
When a compound requirement is too long to fit onto a single line, the
braces are split apart onto separate lines, and the contained expression
is indented. However, this indentation would also apply to the closing
brace and the trailing return type requirement thereof.
This was because the indentation level was being restored after all
trailing things were already read

With this change, the initial level of the opening brace is set before
attempting to read any trailing return type requirements

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

Reviewed By: HazardyKnusperkeks, owenpan, MyDeveloperDay

Differential Revision: https://reviews.llvm.org/D134626
2022-10-01 08:16:57 +03:00
Roy Jacobson 9415aad6a4 [Clang] Fix variant crashes from GH58028, GH57370
Fixes a null dereference in some diagnostic issuing code.

Closes https://github.com/llvm/llvm-project/issues/57370
Closes https://github.com/llvm/llvm-project/issues/58028

Reviewed By: shafik

Differential Revision: https://reviews.llvm.org/D134885
2022-09-30 21:17:34 +03:00
Alex Brachet 9ec7272fc5 Revert "[Driver][Fuchsia] Add default linker flags"
This reverts commit 5dfc8ebee5.
2022-09-30 14:54:48 +00:00
Alex Brachet 5dfc8ebee5 [Driver][Fuchsia] Add default linker flags
Differential Revision: https://reviews.llvm.org/D132416
2022-09-30 14:07:41 +00:00
Roy Jacobson 894c0e94f9 Revert "[Clang] Fix variant crashes from GH58028, GH57370"
This reverts commit 9706bb3165, some CI workers complain about the test.
2022-09-30 11:24:46 +03:00
Roy Jacobson bd1bb8cd42 [Clang] define __cpp_named_character_escapes
Define the feature test macro for named character escapes.
I assume this was not done because it was implemented before formally accepted, right? cxx_status says the paper is implemented.

Reviewed By: cor3ntin

Differential Revision: https://reviews.llvm.org/D134898
2022-09-30 11:13:18 +03:00
Roy Jacobson 9706bb3165 [Clang] Fix variant crashes from GH58028, GH57370
Fixes a null dereference in some diagnostic issuing code.

Closes https://github.com/llvm/llvm-project/issues/57370
Closes https://github.com/llvm/llvm-project/issues/58028

Reviewed By: shafik

Differential Revision: https://reviews.llvm.org/D134885
2022-09-30 11:09:02 +03:00
Michał Górny 924996e0a0 [clang] [Driver] Disable default configs via envvar during testing
Add support for a CLANG_NO_DEFAULT_CONFIG envvar that works like
the --no-default-config option when set to a non-empty value.  Use it
to disable loading system configuration files during the test suite
runs.

Configuration files can change the driver behavior in extensive ways,
and it is neither really possible nor feasible to account for or undo
the effects of even the most common configuration uses.  Therefore,
the most reasonable option seems to be to ignore configuration files
while running the majority of tests (with the notable exception of tests
for configuration file support).

Due to the diversity of ways that %clang is used in the test suite,
including using it to copy or symlink the clang executable, as well to
call -cc1 and -cc1as modes, it is not feasible to pass the explicit
options to disable config loading either.  Using an environment variable
has the advantage of being easily applied across the test suite
and easily unset for default configuration file loading tests.

Differential Revision: https://reviews.llvm.org/D134905
2022-09-30 09:11:50 +02:00
Timm Bäder 1ecaa617e7 [clang][Interp] Handle enums
Handle DeclRefExprs of enum types. They are otherwise handled like
integers.

Differential Revision: https://reviews.llvm.org/D134020
2022-09-30 08:18:14 +02:00
Ben Dunbobbin 7eee2a2d44 [IR] Don't allow DLL storage-class and local linkage
Disallow this meaningless combination. Doing so simplifies analysis
of LLVM code w.r.t t DLL storage-class, and prevents mistakes with
DLL storage class.

- Change the assembler to reject DLL storage class on symbols with
  local linkage.
- Change the bitcode reader to clear the DLL Storage class when the
  linkage is local for auto-upgrading
- Update LangRef.

There is an existing restriction on non-default visibility and local
linkage which this is modelled on.

Differential Review: https://reviews.llvm.org/D134784
2022-09-30 00:26:01 +01:00
Joshua Batista be07c80cf7 [HLSL] add ceil library function
This change exposes the ceil library function for HLSL,
excluding long, int, and long long doubles.
Ceil is supported for all scalar, vector, and matrix types.

Long and long long double support is missing in this patch because those types
don't exist in HLSL. Int is missing because the ceil function only works on floating type arguments.

The full documentation of the HLSL ceil function is available here:
https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-ceil

Reviewed By: python3kgae

Differential Revision: https://reviews.llvm.org/D134319
2022-09-29 14:03:30 -07:00
Siu Chi Chan cecb0e98d4 [HIP] stop forcing the lang std in the driver
D103221 changed HIP's default to C++14, removing the driver logic to
force it into a different std.

Change-Id: I9f5220a7456687039b0bd3b3574f3124d3cc7665

Differential Revision: https://reviews.llvm.org/D134314

Change-Id: I40513f2ebe93ee53ea95c8bb3cc704487d970263
2022-09-29 16:18:29 -04:00
Roy Jacobson 6523814c4e [Clang] P1169R4: static operator()
Implements 'P1169R4: static operator()' from C++2b.

Reviewed By: #clang-language-wg, aaron.ballman

Differential Revision: https://reviews.llvm.org/D133659
2022-09-29 23:03:26 +03:00
Michał Górny 063e17d8b0 [clang] [Driver] More flexible rules for loading default configs
Change the default config file loading logic to be more flexible
and more readable at the same time.  The new algorithm focuses on four
locations, in order:

1. <triple>-<mode>.cfg using real driver mode
2. <triple>-<mode>.cfg using executable suffix
3. <triple>.cfg + <mode>.cfg using real driver mode
4. <triple>.cfg + <mode>.cfg using executable suffix

This is meant to preserve reasonable level of compatibility with
the existing use, while introducing more flexibility and making the code
simpler.  Notably:

1. In this layout, the actual target triple is normally respected,
   and e.g. in `-m32` build the `x86_64-*` configs will never be used.

2. Both real driver mode (preferable) and executable suffix are
   supported.  This permits correctly handling calls with explicit
   `--driver-mode=` while at the same time preserving compatibility
   with the existing code.

3. The first two locations provide users with the ability to override
   configuration per specific target+mode combinaton, while the next two
   make it possible to independently specify per-target and per-mode
   configuration.

4. All config file locations are applicable independently of whether
   clang is started via a prefixed executable, or bare `clang`.

5. If the target is not explicitly specified and the executable prefix
   does not name a valid triple, it is used instead of the actual target
   triple for backwards compatibility.

This is particularly meant to address Gentoo's use case for
configuration files: to configure the default runtimes (i.e. `-rtlib=`,
`-stdlib=`) and `--gcc-install-dir=` for all the relevant drivers,
as well as to make it more convenient for users to override `-W` flags
to test compatibility with future versions of Clang easier.

Differential Revision: https://reviews.llvm.org/D134337
2022-09-29 20:58:59 +02:00
Jan Svoboda 13921262ca [clang][deps] NFC: Expose more flexible version of `Worker::computeDependencies()`
This patch adds new member function to `DependencyScanningWorker` that allows clients to pass custom `DiagnosticConsumer`, and returns `bool`.

This provides more flexibility compared to the existing version that automatically stringifies diagnostics and returns them in `llvm::Error`.

Reviewed By: benlangmuir

Differential Revision: https://reviews.llvm.org/D134838
2022-09-29 11:29:53 -07:00
Tim Northover e62b3a9375 Unwind-tables: move back to original logic outline for kind.
There are lots of options interacting in complex ways here, and when moving to
`getDefaultUnwindTableLevel` I had refactored this and changed behaviour in
some cases. So this reverts the basic structure of the logic back to the
original, while leaving the hook in the new style.
2022-09-29 13:39:06 +01:00
Serge Pavlov b934be2c05 [Support] Class for response file expansion (NFC)
Functions that implement expansion of response and config files depend
on many options, which are passes as arguments. Extending the expansion
requires new options, it in turn causes changing calls in various places
making them even more bulky.

This change introduces a class ExpansionContext, which represents set of
options that control the expansion. Its methods implements expansion of
responce files including config files. It makes extending the expansion
easier.

No functional changes.

Differential Revision: https://reviews.llvm.org/D132379
2022-09-29 19:15:01 +07:00
Timm Bäder f444a7cc16 Revert "[clang][Interp] Handle enums"
This reverts commit c090295916.

One of the test cases fails. Revert this until I know a way to make it
work reliably.
2022-09-29 13:45:52 +02:00
Timm Bäder 971c1b9647 [clang][Interp][NFC] Remove unused prototypes 2022-09-29 12:50:58 +02:00
Timm Bäder b721558a91 [clang][Interp][NFC] Make EvalEmitter::isActive() const 2022-09-29 12:50:57 +02:00
Timm Bäder 62bf6acae6 [clang][Interp][NFC] Unifty ReadArg() impl in Disasm.cpp
We can use another if constexpr here to make this shorter and easier to
understand.
2022-09-29 12:50:57 +02:00
Timm Bäder f55c4b4ee3 [clang][Interp] Print Function address in dump()
It's used in the bytecode dump of the function itself, so useful to
identify which function is being called.
2022-09-29 12:50:57 +02:00
Timm Bäder 9837a3bd4b [clang][Interp][NFC] Remove unused opcode argument types 2022-09-29 12:50:57 +02:00
Timm Bäder 7c65d57af0 [clang][Interp][NFC] Unify the two ReadArg() implementations
Just use a constexpr if here instead of two different implementations.
[#
2022-09-29 12:50:57 +02:00
Timm Bäder e8ad1339d4 [clang][Interp][NFC] Remove unused function 2022-09-29 12:50:57 +02:00
Timm Bäder f927b71376 [clang][Interp] Specify Boolean conversion operartors as (u)int32
Follow up to https://reviews.llvm.org/D133934
2022-09-29 12:50:57 +02:00
Timm Bäder 84f1df8aac [clang][Interp] Properly destruct allocated Records
We are otherwise leaking some memory the records might allocate
themselves.

Differential Revision: https://reviews.llvm.org/D134054
2022-09-29 12:50:56 +02:00
Timm Bäder d5360b932e [clang][Interp][NFC] Make classes final that can be final 2022-09-29 12:50:56 +02:00
Timm Bäder 8f5b061254 [clang][Interp][NFC] Make some Record methods const 2022-09-29 12:50:56 +02:00
Timm Bäder eadd505b0c [clang][Interp][NFC] Limit includes to neccessary ones 2022-09-29 12:50:56 +02:00
Timm Bäder 202ff42f89 [clang][Interp] Rename a local variable to be more specific
It's called BaseSize in the Record class as well, so call it BaseSize
when creating the Record.
2022-09-29 12:50:56 +02:00
Timm Bäder c090295916 [clang][Interp] Handle enums
Handle DeclRefExprs of enum types. They are otherwise handled like
integers.

Differential Revision: https://reviews.llvm.org/D134020
2022-09-29 12:50:56 +02:00
Timm Bäder df1cc801da [clang][Interp] Record item types in InterpStack
The type information is lost when pushing things on the stack. When
later pop()ing items of the wrong type, we can instead simply get
garbage values and those problems are hard to find. Add another stack to
record the type of item we pushed and use that for debugging.

Differential Revision: https://reviews.llvm.org/D133941
2022-09-29 12:50:55 +02:00
Timm Bäder 7c4cad4330 [clang][Interp][NFC] Make a few InterpStack functions const 2022-09-29 12:50:55 +02:00
Timm Bäder ee2e414d66 [clang][Interp] Handle sizeof()
Implement visiting UnaryExprOrTypeTraitExprs to handle sizeof()
expressions.

Differential Revision: https://reviews.llvm.org/D133934
2022-09-29 12:50:55 +02:00
Timm Bäder 1c35f3b93a [clang][Interp][NFC] Unify emit() implementations
Instead of two overloads, use a if constexpr to differentiate between
pointer and non-pointer parameters
2022-09-29 12:50:55 +02:00
Timm Bäder 1d31549e93 [clang][Interp][NFC] Forward-declare Pointer in InterpFrame.h
We don't need the full include here.
2022-09-29 12:50:55 +02:00
Timm Bäder 18a5fc52b2 [clang][Interp][NFC] Remove an unnecessary <vector> include. 2022-09-29 12:50:55 +02:00
Timm Bäder da62ed6ceb [clang][Interp] Pass initializer when creating globals
This is dead code right now but will be used for implementing array
fillers, where we need some information from the initializer when
allocaing the Descriptors.

Differential Revision: https://reviews.llvm.org/D133856
2022-09-29 12:50:54 +02:00
David Green 123064dc39 [Clang][Arm] Convert -fallow-half-arguments-and-returns to a target option. NFC
This cc1 option -fallow-half-arguments-and-returns allows __fp16 to be
passed by argument and returned, without giving an error. It is
currently always enabled for Arm and AArch64, by forcing the option in
the driver. This means any cc1 tests (especially those needing
arm_neon.h) need to specify the option too, to prevent the error from
being emitted.

This changes it to a target option instead, set to true for Arm and
AArch64. This allows the option to be removed. Previously it was implied
by -fnative_half_arguments_and_returns, which is set for certain
languages like open_cl, renderscript and hlsl, so that option now too
controls the errors. There were are few other non-arm uses of
-fallow-half-arguments-and-returns but I believe they were unnecessary.
The strictfp_builtins.c tests were converted from __fp16 to _Float16 to
avoid the issues.

Differential Revision: https://reviews.llvm.org/D133885
2022-09-29 11:00:32 +01:00
Michael Platings dba8fced96 Fix frint ACLE intrinsic names
Although the instruction names begin "frint", the ACLE spec states that
the intrinsic names begin "__rint", without the "f".

Differential Revision: https://reviews.llvm.org/D134824
2022-09-29 09:13:07 +01:00
Fangrui Song 04a65d62a0 Revert D134638 "[Clang][LoongArch] Add inline asm support for constraints k/m/ZB/ZC"
This reverts commit b7baddc755.

Broke CodeGen/X86/callbr-asm-kill.mir
We shall pay attention when adding new constraints.
2022-09-29 00:54:56 -07:00
Weining Lu b7baddc755 [Clang][LoongArch] Add inline asm support for constraints k/m/ZB/ZC
k: A memory operand whose address is formed by a base register and
(optionally scaled) index register.

m: A memory operand whose address is formed by a base register and
offset that is suitable for use in instructions with the same
addressing mode as st.w and ld.w.

ZB: An address that is held in a general-purpose register. The offset
is zero.

ZC: A memory operand whose address is formed by a base register and
offset that is suitable for use in instructions with the same
addressing mode as ll.w and sc.w.

Differential Revision: https://reviews.llvm.org/D134638
2022-09-29 15:02:08 +08:00
Arthur Eubanks 2f3d7c2cc7 [clang] Add debug info in MicrosoftCXXABI::EmitVirtualMemPtrThunk()
(Probably) fixes https://crbug.com/1355639

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D134825
2022-09-28 22:06:04 -07:00
owenca 2d23175fae [clang-format] Fix a bug with C++ `export import <Foo/Bar>`
Fixes #57798.

Differential Revision: https://reviews.llvm.org/D134700
2022-09-28 19:10:12 -07:00
Martin Sebor a181de452d [clang] handle extended integer constant expressions in _Static_assert (PR #57687)
Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D134311
2022-09-28 13:27:58 -06:00