243 Commits

Author SHA1 Message Date
Timm Baeder
cfe26358e3
Reapply "[clang] Avoid re-evaluating field bitwidth" (#122289) 2025-01-11 07:12:37 +01:00
Timm Bäder
59bdea24b0 Revert "[clang] Avoid re-evaluating field bitwidth (#117732)"
This reverts commit 81fc3add1e627c23b7270fe2739cdacc09063e54.

This breaks some LLDB tests, e.g.
SymbolFile/DWARF/x86/no_unique_address-with-bitfields.cpp:

lldb: ../llvm-project/clang/lib/AST/Decl.cpp:4604: unsigned int clang::FieldDecl::getBitWidthValue() const: Assertion `isa<ConstantExpr>(getBitWidth())' failed.
2025-01-08 15:09:52 +01:00
Timm Baeder
81fc3add1e
[clang] Avoid re-evaluating field bitwidth (#117732)
Save the bitwidth value as a `ConstantExpr` with the value set. Remove
the `ASTContext` parameter from `getBitWidthValue()`, so the latter
simply returns the value from the `ConstantExpr` instead of
constant-evaluating the bitwidth expression every time it is called.
2025-01-08 14:45:19 +01:00
Chandler Carruth
dc3cd2e95e
Factor common code for quoting a builtin name (#120835)
This shows up in several places in order to match the quoting of other
uses of the same diagnostic. Handling it centrally simplifies the code
and reduces changes if the storage for builtin names changes.

This refactoring is extracted out of #120534 as requested in code
review.
2025-01-03 19:23:42 -08:00
Timm Baeder
02b30128e8
[clang][bytecode] Always return false for invalid bcp results (#121467) 2025-01-02 13:44:45 +01:00
Timm Baeder
34097c07e1
[clang][bytecode] Consider unknown-size arrays in memcpy/memcmp (#121462)
When emitting diagnostics for the number of elements.
2025-01-02 10:59:08 +01:00
Timm Baeder
d5c8af492f
[clang][bytecode] Consider start index when copying composite array (#121461)
... elements.
2025-01-02 10:31:49 +01:00
Timm Baeder
45e874e390
[clang][bytecode] Check for memcpy/memmove dummy pointers earlier (#121453) 2025-01-02 09:15:14 +01:00
Timm Baeder
f0d60170cc
[clang][bytecode] Check memove/memcpy for available elements (#121383)
Both destination and source pointer need to have at least as many
elements as requested.
2024-12-31 12:14:27 +01:00
Timm Bäder
3496e96f78 [clang][bytecode] Add a missing break 2024-12-28 14:17:06 +01:00
Timm Baeder
e86b68ff56
[clang][bytecode] Add support for typeid pointers (#121251)
Add it as another kind of pointer, saving both a `Type*` for the result
of the typeid() expression as well as one for the type of the typeid
expression.
2024-12-28 14:07:01 +01:00
Timm Baeder
39e8953f89
[clang][bytecode] Move a local variable to a later point (#121250)
We don't need `E` before.
2024-12-28 07:43:15 +01:00
Timm Baeder
acb7dfaa01
[clang][bytecode] Create local scopes for if then/else statements (#120852)
In case those aren't compound statements.
2024-12-22 08:04:49 +01:00
Timm Baeder
1f2d934525
[clang][bytecode] Support pointers in __builtin_mem{move,cpy} (#120560)
Unfortunately, that means we can't use the __builtin_bit_cast
implementation for this.
2024-12-19 16:38:58 +01:00
Timm Baeder
56fd46edb3
[clang][bytecode] Remove a bitcast nullptr_t special case (#120188)
We still need to check the input pointer, so let this go through
BitCastPrim.
2024-12-17 13:23:14 +01:00
Timm Baeder
056cd12284
[clang][bytecode] Don't check returned pointers for liveness (#120107)
We're supposed to let them through and then later diagnose reading from
them, but returning dead pointers is fine.
2024-12-17 06:20:14 +01:00
Timm Baeder
dd6f6a096a
[clang][bytecode] Handle builtin_wmemcmp (#120070) 2024-12-16 13:41:14 +01:00
Timm Bäder
2503a66596 Reapply "[clang][bytecode] Fix some shift edge cases (#119895)"
This reverts commit a6636ce4d124176856c3913d4bf6c3ceff1f5a1f.

This original commit failed on hosts with signed wchar_t. Care for
this in the test.
2024-12-16 10:01:46 +01:00
Timm Bäder
a6636ce4d1 Revert "[clang][bytecode] Fix some shift edge cases (#119895)"
This reverts commit 49c2207f21c0922aedb6c70471f8ea068977eb30.

This breaks on big-endian, again:
https://lab.llvm.org/buildbot/#/builders/154/builds/9018
2024-12-14 06:28:12 +01:00
Timm Baeder
49c2207f21
[clang][bytecode] Fix some shift edge cases (#119895)
Around shifting negative values.
2024-12-14 06:15:56 +01:00
Timm Baeder
30cbd09f4b
[clang][bytecode] Fix memcmp/bcmp failures on big-endian hosts (#119851)
See the discussion in

https://github.com/llvm/llvm-project/pull/119678#issuecomment-2539680746
and
https://github.com/llvm/llvm-project/pull/119544#issuecomment-2539678561
2024-12-13 12:19:27 +01:00
Timm Baeder
98470c0b2e
[clang][bytecode] Handle __builtin_bcmp (#119678)
... the same as `__builtin_memcmp`. Also fix a bug we still had when we
couldn't find a difference in the two inputs after `Size` bytes.
2024-12-12 10:57:39 +01:00
Timm Bäder
cfad8f14f8 [clang][bytecode] Fix a build failure on aarch64
This broke e.g.
https://lab.llvm.org/buildbot/#/builders/190/builds/11216
2024-12-12 09:08:30 +01:00
Timm Baeder
8713914d76
[clang][bytecode] Handle __builtin_memcmp (#119544) 2024-12-12 08:59:35 +01:00
Timm Baeder
d416cae180
[clang][bytecode][NFC] Use Pointer::pointToSameBlock (#119552)
block() requires the pointer to be a block pointer.
2024-12-11 16:14:19 +01:00
Timm Baeder
4dde52d76b
[clang][bytecode] Check for overlapping memcpy regions (#119535) 2024-12-11 12:06:56 +01:00
Timm Baeder
74393f3da0
[clang][bytecode][NFC] Avoid calling ASTContext::getTypeSize() (#119392)
In the case of primitive arrays, we can do this once and reuse the value
for all elements.
2024-12-11 09:45:22 +01:00
Timm Baeder
0fb06172f1
[clang][bytecode] Check vector element types for eligibility (#119385)
Like we do in ExprConstant.cpp.
2024-12-10 17:56:48 +01:00
Timm Baeder
ce1587346b
[clang][bytecode] Allow checking builtin functions... (#119328)
... in checkingPotentialConstantExpression mode. This is what the
current interpreter does, yet it doesn't do so for
`__builtin_operator_new`.
2024-12-10 07:42:13 +01:00
Timm Baeder
6168739f00
[clang][bytecode] Reject memcpy sizes with element size remainder (#119209) 2024-12-09 16:57:49 +01:00
Timm Baeder
d17e51f306
[clang][bytecode] Handle __builtin_strncmp (#119208) 2024-12-09 16:17:39 +01:00
Jie Fu
4f08fa1a77 [clang] Fix -Wunused-variable in InterpBuiltin.cpp (NFC)
/llvm-project/clang/lib/AST/ByteCode/InterpBuiltin.cpp:262:23:
error: unused variable 'AC' [-Werror,-Wunused-variable]
    const ASTContext &AC = S.getASTContext();
                      ^
1 error generated.
2024-12-09 21:23:08 +08:00
Timm Baeder
00b50c917b
[clang][bytecode] Handle __builtin_wcslen (#119187)
Handle different char widths in builtin_strlen.
2024-12-09 12:34:25 +01:00
Timm Baeder
1fbbf4c418
[clang][bytecode] Pass (float) BitWidth to DoBitCast (#119119)
In certain cases (i.e. long double on x86), the bit with we get from the
floating point semantics is different than the type size we compute for
the BitCast instruction. Pass this along to DoBitCast, so in there we
can check only the relevant bits for being initialized.

This also fixes a weirdness we still had in DoBitCast.
2024-12-08 18:54:08 +01:00
Timm Bäder
416e4cd332 [clang][bytecode][NFC] Remove leftover debug output 2024-12-07 13:56:37 +01:00
Timm Baeder
b4150ed128
[clang][bytecode] Check composite bitcasts for indeterminate bits (#118988) 2024-12-07 13:06:00 +01:00
Timm Baeder
2f9cd43a73
[clang][bytecode] Check primitive bit casts for indeterminate bits (#118954)
Record bits ranges of initialized bits and check them in
allInitialized().
2024-12-06 15:50:59 +01:00
Timm Baeder
b6217f67a4
[clang][bytecode] Fix bitcasting from null pointers (#116999) 2024-12-05 13:13:59 +01:00
Timm Baeder
abc27039be
[clang][bytecode] Pass __builtin_memcpy size along (#118649)
To DoBitCastPtr, so we know how many bytes we want to read.
2024-12-05 06:55:18 +01:00
Timm Baeder
44be794658
[clang][bytecode] Not all null pointers are 0 (#118601)
Get the Value from the ASTContext instead.
2024-12-05 06:03:50 +01:00
Timm Baeder
7aec6dc477
[clang][bytecode] Initialize bases when bitcasting (#117179)
Base pointers do not get passed to the callback, so initialize them when iterating bases.
2024-12-04 16:49:03 +01:00
Timm Bäder
12ca72ba7f Reapply "[clang][bytecode] Handle bitcasts involving bitfields (#116843)"
This reverts commit 54db16221c92eb52efbea90ad5b5d2a1d00cda3e.

Check for existence of __SIZOEF_INT128__ so we don't run those
tests on targets that don't have int128.
2024-12-04 11:53:37 +01:00
Timm Bäder
54db16221c Revert "[clang][bytecode] Handle bitcasts involving bitfields (#116843)"
This reverts commit 4b5e7fa4de54e00df007ae5e2675393fd046aa59.

This breaks builders:
https://lab.llvm.org/buildbot/#/builders/154/builds/8464

I guess some more testing on 32 bit hosts is needed.
2024-12-04 11:43:43 +01:00
Timm Baeder
4b5e7fa4de
[clang][bytecode] Handle bitcasts involving bitfields (#116843)
Copy the data one bit at a time, leaving optimizations for future work.
Adds a BitcastBuffer that takes care of pushing the bits in the right
order.
2024-12-04 11:25:04 +01:00
Timm Baeder
7802fb5f51
[clang][bytecode] Fix __extension__ handling for vector operators (#118482)
Don't reject them, but delegate to the subexpression.
2024-12-03 14:48:55 +01:00
Timm Baeder
ff0babc917
[clang][bytecode] Fix discarded pointer subtractions (#118477)
We need to pop the value.
2024-12-03 14:34:32 +01:00
Timm Bäder
61c2ac03d8 Revert "[clang][bytecode] Handle __builtin_wcslen (#118446)"
This reverts commit 89a0ee89973c3d213c4bc11c26b41eab67e06da0.

This breaks builders:
https://lab.llvm.org/buildbot/#/builders/13/builds/3885
2024-12-03 13:35:57 +01:00
Timm Baeder
3f39c5df08
[clang][bytecode] Reject memcpy dummy pointers after null check (#118460)
To match the diagnostic output of the current interpreter.
2024-12-03 11:51:49 +01:00
Timm Baeder
0f4dc4276f
[clang][bytecode] Initialize elements in __builtin_elementwise_popcount (#118457) 2024-12-03 11:14:06 +01:00
Timm Baeder
89a0ee8997
[clang][bytecode] Handle __builtin_wcslen (#118446)
... just like strlen.
2024-12-03 10:20:30 +01:00