summaryrefslogtreecommitdiff
path: root/clang/test
AgeCommit message (Collapse)Author
2025-11-23Don't mark lambda non-dependent if nested in a generic lambda. (#149121)Daniel M. Katz
Fixes #118187 Fixes #156579 An instantiated `LambdaExpr` can currently be marked as `LDK_NeverDependent` if it's nested within a generic lambda. If that `LambdaExpr` in fact depends on template parameters introduced by the enclosing generic lambda, then its dependence will be misreported as "never dependent" and spurious diagnostics can result. The fix here proposed is a bit ugly, but the condition that it's being bolted onto already seems like a bit of a hack, so this seems no worse for wear. Note that #89702 surfaced this change because it caused the inner lambda expression to (correctly) be considered in a constant-evaluated context. The affected check for whether to mark the inner lambda as `LDK_NeverDependent` therefore started to apply, whereas it didn't before. **Tested**: `check-clang` and `check-cxx`.
2025-11-22[X86] Move _mm512_mask_blend_pd/ps tests to avx512f-builtins.c (#169170)Simon Pilgrim
These aren't AVX512VL tests
2025-11-22[Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - Allow AVX512 ↵NagaChaitanya Vellanki
VPSHUFBITQMB intrinsics to be used in constexpr (#168100) Resolves #161337
2025-11-22 [Clang][X86] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - allow ↵stomfaig
VPERMILPD/S variable mask intrinsics to be used in constexpr (#168861) Allowing VPERMILPD/S intrinsics to be used in constexpr Closes #167878
2025-11-22[clang][X86] Allow VALIGND/Q element-shift intrinsics in constexpr ↵Muhammad Abdul
evaluation (#168206) Fixes #167681
2025-11-22[CIR] Add support for non-compile-time memory order (#168892)Sirui Mu
This patch upstreams CIR support for atomic operations with memory orders that are not known at compile time.
2025-11-22[Clang][Driver] Allow -fsanitize-coverage with -fsanitize=alloc-token (#169128)Marco Elver
These are not incompatible; allow them to be combined.
2025-11-22[clang][bytecode] Don't call getThis() on the bottom function frame (#169044)Timm Baeder
We can't access the calling frame in that case. Fixes https://github.com/llvm/llvm-project/issues/169032
2025-11-21Revert "[OpenMP] Fix firstprivate pointer handling in target regions" (#169143)dpalermo
Reverts llvm/llvm-project#167879 This PR is causing assertions in the check-offload tests: https://lab.llvm.org/staging/#/builders/105 https://lab.llvm.org/staging/#/builders/105/builds/37057
2025-11-21Revert "Reland [MS][clang] Add support for vector deleting destructors" ↵Zequan Wu
(#169116) This reverts 4d10c1165442cbbbc0017b48fcdd7dae1ccf3678 and its two dependent commits: e6b9805b574bb5c90263ec7fbcb94df76d2807a4 and c243406a695ca056a07ef4064b0f9feee7685320, see discussion in https://github.com/llvm/llvm-project/pull/165598#issuecomment-3563825509.
2025-11-21[CIR] Upstream overflow builtins (#166643)adams381
This implements the builtins that handle overflow. This fixes issue https://github.com/llvm/llvm-project/issues/163888
2025-11-21[CIR] Implement global array dtor support (#169070)Andy Kaylor
This implements handling to destroy global arrays that require destruction. Unlike classic codegen, CIR emits the destructor loop into a 'dtor' region associated with the global array variable. Later, during LoweringPrepare, this code is moved into a helper function and a call to __cxa_atexit arranges for it to be called during the shared object shutdown.
2025-11-22[CIR] Upstream CIR codegen for undef x86 builtins (#167945)Thibault Monnier
2025-11-22Really fix tysan test failing on unsupported arches (#169096)Sergei Barannikov
'target' is not one of the features recognized by clang tests, and the test doesn't require X86 backend to be built. Specify the target explicitly instead. Remove duplicate `-fsanitize=type` as well.
2025-11-21[OpenACC][CIR] deviceptr clause lowering for local 'declare' (#169085)Erich Keane
This is very similar to the 'link' that was done in the last patch, except this works on all storage, but only on pointers. This also shows a bit more of how the enter/exit pairs work in the test. Implementation itself is very simple, as it is just properly handling it in the clause handler.
2025-11-21[Clang][Sema] Add fortify warnings for strcat (#168965)venk-ks
Continue to add fortify warnings that are missing in Clang for string functions as part of #142230
2025-11-21fix tysan test failing on unsupported arches (#169066)Matthew Nagy
2025-11-21[OpenACC][CIR] Handle 'declare' construct local lowering (&link clause) ↵Erich Keane
(#168793) 'declare' is a declaration directive, so it can appear at 3 places: Global/NS scope, class scope, or local scope. This patch implements ONLY the 'local' scope lowering for 'declare'. A 'declare' is lowered as a 'declare_enter' and 'declare_exit' operation, plus data operands like all others. Sema restricts the form of some of these, but they are otherwise identical. 'declare' DOES require at least 1 clause for the examples to make sense, so this ALSO implements 'link', which is the 'simpliest' one. It is ONLY attached to the 'declare_enter', and doesn't require any additional work besides a very small addition to how we handle clauses.
2025-11-21[HLSL] Add Load overload with status (#166449)Joshua Batista
This PR adds a Load method for resources, which takes an additional parameter by reference, status. It fills the status parameter with a 1 or 0, depending on whether or not the resource access was mapped. CheckAccessFullyMapped is also added as an intrinsic, and called in the production of this status bit. Only addresses DXIL for the below issue: https://github.com/llvm/llvm-project/issues/138910 Also only addresses the DXIL variant for the below issue: https://github.com/llvm/llvm-project/issues/99204
2025-11-21[clang][Sema][OpenMP] Fix GPU exception target check (#169056)Nick Sarnie
Looks like I missed this when I added `Triple::isGPU()`. Signed-off-by: Nick Sarnie <nick.sarnie@intel.com>
2025-11-21[OpenMP][OMPIRBuilder] Use runtime CC for runtime calls (#168608)Nick Sarnie
Some targets have a specific calling convention that should be used for generated calls to runtime functions. Pass that down and use it. Signed-off-by: Nick Sarnie <nick.sarnie@intel.com>
2025-11-21[TySan][Clang] Add clang flag to use tysan outlined instrumentation a… ↵Matthew Nagy
(#166170) …nd update docs
2025-11-21[LifetimeSafety] Detect expiry of loans to trivially destructed types (#168855)Kashika Akhouri
Handling Trivially Destructed Types This PR uses `AddLifetime` to handle expiry of loans to trivially destructed types. Example: ```cpp int * trivial_uar(){ int *ptr; int x = 1; ptr = &x; return ptr; } ``` The CFG created now has an Expire Fact for trivially destructed types: ``` Function: trivial_uar Block B2: End of Block Block B1: Issue (0 (Path: x), ToOrigin: 0 (Expr: DeclRefExpr)) OriginFlow (Dest: 1 (Expr: UnaryOperator), Src: 0 (Expr: DeclRefExpr)) Use (2 (Decl: ptr), Write) OriginFlow (Dest: 2 (Decl: ptr), Src: 1 (Expr: UnaryOperator)) Use (2 (Decl: ptr), Read) OriginFlow (Dest: 3 (Expr: ImplicitCastExpr), Src: 2 (Decl: ptr)) Expire (0 (Path: x)) OriginEscapes (3 (Expr: ImplicitCastExpr)) End of Block Block B0: End of Block ``` This Expire Fact issues UAR and UAF warnings. Fixes https://github.com/llvm/llvm-project/issues/162862
2025-11-21[OpenMP] Fix firstprivate pointer handling in target regions (#167879)Sairudra More
Firstprivate pointers in OpenMP target regions were not being lowered correctly, causing the runtime to perform unnecessary present table lookups instead of passing pointer values directly. This patch adds the OMP_MAP_LITERAL flag for firstprivate pointers, enabling the runtime to pass pointer values directly without lookups. The fix handles both explicit firstprivate clauses and implicit firstprivate semantics from defaultmap clauses. Key changes: - Track defaultmap(firstprivate:...) clauses in MappableExprsHandler - Add isEffectivelyFirstprivate() to check both explicit and implicit firstprivate semantics - Apply OMP_MAP_LITERAL flag to firstprivate pointers in generateDefaultMapInfo() Map type values: - 288 = OMP_MAP_TARGET_PARAM | OMP_MAP_LITERAL (explicit firstprivate) - 800 = OMP_MAP_TARGET_PARAM | OMP_MAP_LITERAL | OMP_MAP_IS_PTR (implicit firstprivate from defaultmap) Before: Pointers got 544 (TARGET_PARAM | IS_PTR) causing runtime lookups After: Pointers get 288 or 800 (includes LITERAL) for direct pass Updated the 16 existing test cases in OpenMP that were expecting the previous (buggy) behavior. The tests were checking for map type values of 544 (TARGET_PARAM | IS_PTR) and 32 (TARGET_PARAM) for firstprivate pointers, which lacked the LITERAL flag (256). With this fix, firstprivate pointers now correctly include the LITERAL flag, resulting in map types 800 (TARGET_PARAM | LITERAL | IS_PTR) for implicit firstprivate and 288 (TARGET_PARAM | LITERAL) for explicit firstprivate. The updated tests now validate the correct behavior as per OpenMP 5.2 semantics, where firstprivate variables should be passed by value rather than requiring runtime present table lookups. --------- Co-authored-by: Sairudra More <moresair@pe31.hpc.amslabs.hpecorp.net> Co-authored-by: Alexey Bataev <a.bataev@gmx.com>
2025-11-21[Clang] Fix handling of explicit parameters in `SemaLambda` (#168558)Willem Kaufmann
Previously, the presence of an explicit parameter list was detected by querying `getNumTypeObjects()` from the `Declarator` block of the lambda definition. This breaks for lambdas which do not have a parameter list but _do_ have a trailing return type; that is, both of ``` []() -> int { return 0; }; [] -> int { return 0; }; ``` would return `true` when inspecting `LambdaExpr::hasExplicitParameters()`. Fix this by instead querying the `LParenLoc()` from the `Declarator`'s `FunctionTypeInfo`. If `isValid() == true`, then an explicit parameter list must be present, and if it is `false`, then it is not. This commit also adds `hasExplicitParameters` as an attribute to a `LambdaExpr`'s JSON AST dump. A new test (`ast-dump-lambda-json.cpp`) is also added to validate the fix and presence of the new attribute in the output. `ast-dump-expr-json.cpp` is also updated to validate the new attribute. Fixes https://github.com/llvm/llvm-project/issues/168452.
2025-11-21[clang][TypePrinter] Replace AppendScope with printNestedNameSpecifier (#168534)Michael Buch
In debug-info we soon have the need to print names using the full scope of the entity (see discussion in https://github.com/llvm/llvm-project/pull/159592). Particularly, when a structure is scoped inside a function, we'd like to emit the name as `func()::foo`. `CGDebugInfo` uses the `TypePrinter` to print type names into debug-info. However, `TypePrinter` stops (and ignores) `DeclContext`s that are functions. I.e., it would just print `foo`. Ideally it would behave the same way `printNestedNameSpecifier` does. The FIXME in https://github.com/llvm/llvm-project/blob/47c1aa4cef638c97b74f3afb7bed60e92bba1f90/clang/lib/AST/TypePrinter.cpp#L1520-L1521 motivated this patch. See https://github.com/llvm/llvm-project/pull/168533 for how this will be used by `CGDebugInfo`. The plan is to introduce a new `PrintingPolicy` that prints anonymous entities using their full scope (including function/anonymous scopes) and the mangling number.
2025-11-21[C++20] [Modules] Check TULocal entity within exported entitiesChuanqi Xu
See the attached test for example.
2025-11-21[Clang][OpenMP] Bug fix Default clause variable category (#168846)SunilKuravinakop
Same changes as in fix for https://github.com/llvm/llvm-project/pull/165276 except for changes in test case : 1) remove unnecessary include in test to restore Ubuntu build. This is not needed as allocatable modifier is not applicable to the default clause in C/C++. 2) Changes in CHECK statements to accommodate testing failure on toolchain builders at Google, Reported by Prabhu Rajasekaran. --------- Co-authored-by: Sunil Kuravinakop <kuravina@pe31.hpc.amslabs.hpecorp.net>
2025-11-21[OpenCL] Add missing OpenCL 3.0 features to OpenCLExtensions.def; revert ↵Wenju He
header-only macros (#168016) Adds the remaining optional feature macros from the OpenCL C 3.0 spec (section 6.2.1 table). Targets can now enable these via OpenCLFeaturesMap returned by getSupportedOpenCLOpts(). Revert a84599f177a6 (header‑only feature macros). Header‑only macros are difficult to disable on SPIR-V targets, and the prior undef approach (a60b8f468119) does not scale. After this PR, they can be disabled via `-cl-ext=-<feature>`. https://github.com/KhronosGroup/OpenCL-Docs/issues/1328 also notes that unconditional definition of the header‑only macros in opencl-c-base.h should be removed.
2025-11-20[CIR] ExtVectorElementExpr with rvalue base (#168260)Amr Hesham
Upstream ExtVectorElementExpr with rvalue base
2025-11-20[clang][diagnostics] added warning for possible enum compare typo (#168445)GrumpyPigSkin
Added diagnosis and fixit comment for possible accidental comparison operator in an enum. Closes: #168146
2025-11-20[HLSL] Implement the `fwidth` intrinsic for DXIL and SPIR-V target (#161378)Alexander Johnston
Adds the fwidth intrinsic for HLSL. The DXIL path only requires modification to the hlsl headers. The SPIRV path implements the OpFwidth builtin in Clang and instruction selection for the OpFwidth instruction in LLVM. Also adds shader stage tests to the ddx_coarse and ddy_coarse instructions used by fwidth. Closes #99120 --------- Co-authored-by: Alexander Johnston <alexander.johnston@amd.com>
2025-11-20[X86][Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - allow ↵sskzakaria
AVX512 mask predicate intrinsics to be used in constexpr (#165054) Enables constexpr evaluation for the following AVX512 Instrinsics: ``` _mm_movepi8_mask _mm256_movepi8_mask _mm512_movepi8_mask _mm_movepi16_mask _mm256_movepi16_mask _mm512_movepi16_mask _mm_movepi32_mask _mm256_movepi32_mask _mm512_movepi32_mask _mm_movepi64_mask _mm256_movepi64_mask _mm512_movepi64_mask ``` Part of #162072
2025-11-20[AllocToken] Enable alloc token instrumentation for size-returning functions ↵Aleksandr Nogikh
(#168840) Consider a newly added "malloc_span" attribute in the allocation token instrumentation to ensure that allocation functions with the "malloc_span" attribute are processed similarly to other memory allocation functions. Update the tests to demonstrate applicability to __size_returning_new.
2025-11-19[clang][deps] Add module map describing compiled module to file ↵Volodymyr Sapsai
dependencies. (#160226) When we add the module map describing the compiled module to the command line, add it to the file dependencies as well. Discovered while working on reproducers where a command line input was missing in the captured files as it wasn't considered a dependency.
2025-11-20[clang][bytecode] Implement case ranges (#168418)marius doerner
Fixes #165969 Implement GNU case ranges for constexpr bytecode interpreter.
2025-11-19[ClangLinkerWrapper] Refactor target ID sanitization for Windows file… ↵Yaxun (Sam) Liu
(#168744) … names Fix non-RDC mode HIP compilation for the new driver on Windows due to invalid temporary file names when offload arch is a target ID containing ':', which is invalid in file names on Windows. Refactor the existing handling of ':' in file names on Windows from clang driver into a shared function sanitizeTargetIDInFileName in clang/Basic/TargetID.h. This function replaces ':' with '@' on Windows only, preserving the original behavior. Update both clang/lib/Driver/Driver.cpp and clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp to use this shared function, ensuring consistent handling across both tools.
2025-11-19[Arm64EC][clang] Implement varargs support in clang. (#152411)Eli Friedman
The clang side of the calling convention code for arm64 vs. arm64ec is close enough that this isn't really noticeable in most cases, but the rule for choosing whether to pass a struct directly or indirectly is significantly different. (Adapted from my old patch https://reviews.llvm.org/D125419 .) Fixes #89615.
2025-11-19[CIR] Upstream CIR codegen for `lzcnt` and `tzcnt` x86 builtins (#168479)Haocong Lu
Support CIR codegen for x86 builtins `__builtin_ia32_lzcnt` and `__builtin_ia32_tzcnt`.
2025-11-19[CIR] Add CxxCTorAttr, CxxDTorAttr, CxxAssignAttr, CxxSpecialMemberAttr to ↵Hendrik Hübner
cir::FuncOp (#167975) This PR adds a special member attribute to `cir::FuncOp`. This attribute is also present in the incubator repo. Additionally, I added a "is_trivial" flag, to mark trivial members. I think that might be useful when trying to replace calls to the copy constructor with memcpy for example, but please let me know your thoughts on this. [Here in the incubator repo](https://github.com/llvm/clangir/blob/823e943d1b9aaba0fc46f880c5a6ac8c29fc761d/clang/lib/CIR/Dialect/Transforms/LoweringPrepare.cpp#L1537-L1550) this function is called `LowerTrivialConstructorCall`, but I don't see a check that ensures the constructor is actually trivial.
2025-11-19[CIR] Upstream isfpclass op (#166037)Jasmine Tang
Ref commit in incubator: ee17ff67f3e567585db991cdad1159520c516bb4 There is a minor change in the assumption for emitting a direct callee. In incubator, `bool hasAttributeNoBuiltin = false` (`llvm-project/clang/lib/CIR/CodeGen/CIRGenExpr.cpp:1671`), while in upstream, it's true, therefore, the call to finite(...) is not converted to a builtin anymore. Fixes #163892
2025-11-19[clang][DebugInfo] Mark _BitInt's as reconstitutable when emitting ↵Michael Buch
-gsimple-template-names (#168383) Depends on: * https://github.com/llvm/llvm-project/pull/168382 As of recent, LLVM includes the bit-size as a `DW_AT_bit_size` (and as part of `DW_AT_name`) of `_BitInt`s in DWARF. This allows us to mark `_BitInt`s as "reconstitutable" when compiling with `-gsimple-template-names`. We still only omit template parameters that are `<= 64` bit wide. So support `_BitInt`s larger than 64 bits is not part of this patch.
2025-11-19[OpenACC] Make sure 'link' gets the right node in the AST with ASEerichkeane
Another miss when working through 'link', we didn't properly handle giving the whole array-section expression or array index expression, instead allowed it to only get the decl-ref-expr. This patch makes sure we don't add the wrong thing.
2025-11-19[HLSL][TableGen] Add `__hlsl_resource_t` to known built-in function types ↵Helena Kotas
(#163465) This change adds resource handle type `__hlsl_resource_t` to the list of types recognized in the Clang's built-in functions prototype string. HLSL has built-in resource classes and some of them have many methods, such as [Texture2D](https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/sm5-object-texture2d). Most of these methods will be implemented by built-in functions that will take resource handle as an argument. This change enables us to move from generic `void(...)` prototype string for these methods and explicit argument checking in `SemaHLSL.cpp` to a prototype string with explicit argument types. Argument checking in `SemaHLSL.cpp` can be reduced to handle just the rules that cannot be expressed in the prototype string (for example verifying that the offset value in `__builtin_hlsl_buffer_update_counter` is `1` or `-1`). In order to make this work, we now allow conversions from attributed resource handle type such as `__hlsl_resource_t [[hlsl::resource_class(UAV)]] [[hlsl::contained_type(float)]]` to a plain non-attributed `__hlsl_resource_t` type.
2025-11-19[OpenACC] Fix crash when checking an section in a 'link' clause (#168783)Erich Keane
I saw this while doing lowering, we were not properly looking into the array sections for the variable. Presumably we didn't do a good job of making sure we did this right when making this extension, and missed this spot.
2025-11-19[CIR] Handle non-empty null base class initialization (#168646)Andy Kaylor
This implements null base class initialization for non-empty bases.
2025-11-19[OpenACC][CIR] Fix atomic-capture single-line-postfix (#168717)Erich Keane
In my last patch, it became clear during code review that the postfix operation was actually a read THEN update, not update/read like other single line versions. It wasn't clear at the time how much additional work this would be to make postfix work correctly (and they are a bit of a 'special' thing in codegen anyway), so this patch adds some functionality to sense this and special-cases it when generating the statement info for capture.
2025-11-19[CIR] Upstream CIR await op (#168133)Andres-Salamanca
This PR upstreams `cir.await` and adds initial codegen for emitting a skeleton of the ready, suspend, and resume branches. Codegen for these branches is left for a future PR. It also adds a test for the invalid case where a `cir.func` is marked as a coroutine but does not contain a `cir.await` op in its body.
2025-11-19[Clang][Sema] Fix __builtin_infer_alloc_token() return type (#168773)Marco Elver
Using the builtin failed on 32-bit architectures: ``` clang/lib/AST/ExprConstant.cpp:14299: [..]: Assertion `I.getBitWidth() == Info.Ctx.getIntWidth(E->getType()) && "Invalid evaluation result."' failed. ``` The return type is meant to be size_t. Fix it.
2025-11-19[CIR] Upstream CIR codegen for mxcsr x86 builtins (#167948)Thibault Monnier