Timm Bäder
497480b38a
[clang][Interp] IntegralComplexToBoolean casts
...
Differential Revision: https://reviews.llvm.org/D148426
2023-12-14 13:11:00 +01:00
Timm Bäder
07e3c245ba
[clang][Interp] Support empty initlist initializers for complex types
...
Differential Revision: https://reviews.llvm.org/D147369
2023-12-14 12:53:40 +01:00
Timm Bäder
797fee68d1
[clang][Interp] Start supporting complex types
...
Differential Revision: https://reviews.llvm.org/D146408
2023-12-14 11:57:38 +01:00
Timm Bäder
9406d2a345
[clang][Interp][NFC] Remove unused include
2023-12-07 15:20:22 +01:00
Timm Bäder
489df61a29
[clang][Interp][NFC] const qualify a local variable
2023-11-27 11:17:49 +01:00
Timm Bäder
4a8b43ba3b
[clang][Interp][NFC] Factor array element init into its own function
2023-11-20 13:00:57 +01:00
Timm Baeder
965d301dff
[clang][Interp] Implement __builtin_classify_type ( #71972 )
...
This adds some infrastructure for unevaluated builtin calls, and uses the implementation from ExprConstant.cpp
2023-11-17 16:13:23 +01:00
Timm Baeder
216dfd5ff0
[clang][Interp] Fix stack peek offset for This ptr ( #70663 )
...
`Function::getArgSize()` include both the instance and the RVO pointer,
so we need to subtract here.
2023-11-14 16:22:22 +01:00
Timm Baeder
190b9179a5
[clang][Interp] Handle SizeOfPackExprs ( #71929 )
2023-11-12 05:34:16 +01:00
Timm Bäder
7b1a058021
[clang][Interp][NFC] Use direct Get{Local,Global} when possible
...
When returning variable declaration values, try to get the value
directly instead of always going through a Pointer.
2023-11-10 11:30:38 +01:00
Timm Baeder
feedb7c0db
[clang][Interp] Fix IntAP(s) to IntAP(s) casts ( #69915 )
...
This was still assert(false)'ed out, it's for casts between two IntAP/IntAPS expressions.
We can't just short-circuit for FromT == ToT because we need to consider the bitwidth when doing the cast.
2023-11-06 15:13:43 +01:00
Timm Bäder
8a1719d3ed
[clang][Interp][NFC] Use delegate() in VisitCXXBindTemporaryExpr
2023-10-30 17:20:27 +01:00
Timm Bäder
051fade10f
[clang][Interp][NFC] Use delegate() address-of operators
2023-10-27 10:43:35 +02:00
Timm Baeder
e01efddbf3
[clang][Interp] Correctly emit destructors for multi-dimensional arrays ( #69140 )
...
We were not taking those into account correctly when emitting
destructors. Fix that and add tests for it.
Fixes #69115
2023-10-26 14:51:30 +02:00
Timm Baeder
658874e084
[clang][Interp] Handle unknown-size arrays better ( #68868 )
...
We unfortunately actually need to do some checks for array-to-pointer
decays it seems.
2023-10-26 13:53:54 +02:00
Timm Bäder
b4fc1418d9
[clang][Interp] Fix ArrayInitLoop common expr life time
...
The local variable needs to survive for all the interations of the
ArrayInitLoopExpr. So, visit it explicitly before we iterate.
2023-10-24 12:20:02 +02:00
Timm Baeder
b44763c5e6
[clang][Interp] Fix scalar inits of void type ( #69868 )
2023-10-24 09:18:39 +02:00
isuckatcs
9022f40212
[clang][Interp] Only evaluate the source array initialization of an ArrayInitLoopExpr
once ( #68039 )
...
This patch implements an `OpaqueValueExpr` caching functionality in `Interp`
by storing the result of the expression in a local variable.
2023-10-23 17:52:27 +02:00
Timm Bäder
311f725d9a
[clang][Interp] Create only globals when initializing a global variable
...
For this code:
struct O {
int &&j;
};
O o1(0);
The generated AST for the initializer of o1 is:
VarDecl 0x62100006ab08 <array.cpp:119:3, col:9> col:5 o1 'O':'O' parenlistinit
`-ExprWithCleanups 0x62100006b250 <col:7, col:9> 'O':'O'
`-CXXParenListInitExpr 0x62100006b210 <col:7, col:9> 'O':'O'
`-MaterializeTemporaryExpr 0x62100006b1f0 <col:8> 'int' xvalue
`-IntegerLiteral 0x62100006abd0 <col:8> 'int' 0
Before this patch, we create a local temporary variable for the
MaterializeTemporaryExpr and destroy it again when destroying the
EvalEmitter we create to interpret the initializer. However, since
O::j is a reference, this reference now points to a local variable
that doesn't exist anymore.
Differential Revision: https://reviews.llvm.org/D156453
2023-10-19 14:50:17 +02:00
Timm Baeder
59d2dc239b
[clang][Interp] IntegralAP zero-initializers ( #68081 )
2023-10-19 08:20:53 +02:00
Timm Bäder
3c4ecc4628
[clang][Interp][NFC] Refactor VisitImplicitValueInitExpr
...
The FIXME comment here is not really correct. Also, handle the case of
non-primitive array element types differently, to reduce indentation.
2023-10-15 08:52:43 +02:00
Timm Bäder
80737d2ddf
[clang][Interp][NFC] Pass PrimType to visitZeroInitializer()
...
This fixes an old FIXME comment. Almost all callers already classify()
the type anyway, so just pass the result of that
to visitZeroInitializer().
2023-10-14 18:43:00 +02:00
Timm Baeder
a653749aca
[clang][Interp] Implement compound assign operators on bitfields ( #67306 )
2023-10-14 09:17:35 +02:00
Timm Baeder
26d9f851cf
[clang][Interp] Add basic support for _BitInt ( #68069 )
...
Make sure we pass the expected bitwidth around when casting to
IntAP/IntAPS.
This makes it easier to test the `IntegralAP` code for different bit
widths than 128.
2023-10-11 08:53:21 +02:00
Timm Bäder
6172960cea
[clang][Interp] Basic support for bit fields
...
Differential Revision: https://reviews.llvm.org/D155548
2023-10-10 13:38:26 +02:00
Timm Baeder
12107386ca
[clang][Interp] Handle CXXScalarValueInitExprs ( #67147 )
...
Handle those by just zero-initializing the result.
2023-10-10 12:45:09 +02:00
Timm Baeder
2bed2a7a5c
[clang][Interp] Emit dummy values for unknown C variables ( #66749 )
...
We can't load anything from them, but we can still take their address or
return them as lvalues.
2023-10-07 16:00:19 +02:00
Timm Bäder
57147bb253
[clang][Interp] Support LambdaThisCaptures
...
Differential Revision: https://reviews.llvm.org/D154262
2023-10-05 09:46:15 +02:00
Timm Bäder
4d7f4a7c82
[clang][Interp] Only lazily visit constant globals
...
Differential Revision: https://reviews.llvm.org/D158516
2023-10-05 09:37:37 +02:00
Timm Baeder
f58d54ab96
[clang][Interp] Diagnose uninitialized bases ( #67131 )
2023-10-03 06:46:31 +02:00
Timm Bäder
18461dc454
[clang][Interp] Add IntegralAP for arbitrary-precision integers ( #65844 )
2023-10-01 07:11:07 +02:00
Timm Bäder
4bae636abf
Revert "[clang][Interp] Add IntegralAP for arbitrary-precision integers ( #65844 )"
...
This reverts commit 16b9e6fbac4c0bd94c66e7670a41b5c266cf7bff.
This breaks buildbots.
2023-09-30 20:12:14 +02:00
Timm Baeder
16b9e6fbac
[clang][Interp] Add IntegralAP for arbitrary-precision integers ( #65844 )
...
This adds `IntegralAP` backing the two new primtypes `IntAP` (unsigned
arbitrary-precision int) and `IntAPS` (same but signed).
We use this for `int128` support (which isn't available on all host
systems we support AFAIK) and I think we can also use this for `_BitInt`
later.
2023-09-30 20:08:22 +02:00
Timm Baeder
4909e7cac7
[clang][Interp] Zero-init remaining string literal elements ( #66862 )
2023-09-30 08:28:09 +02:00
Timm Baeder
512739ebbb
[clang][Interp] Three-way comparisons ( #65901 )
2023-09-29 09:41:58 +02:00
Timm Bäder
765b38fbf1
[clang][Interp][NFC] Small code refactoring
2023-09-20 14:33:46 +02:00
Timm Bäder
52a55a7178
[clang][Interp] Allow zero-init of primitives with an empty init list
...
Differential Revision: https://reviews.llvm.org/D158595
2023-09-18 11:09:30 +02:00
Timm Bäder
23c39f9a9e
[clang][Interp] Diagnose unknown parameter values
...
Differential Revision: https://reviews.llvm.org/D156509
2023-09-15 13:10:19 +02:00
Timm Bäder
cd2f2c1662
[clang][Interp] Visit Logical-not operand as bool
...
Differential Revision: https://reviews.llvm.org/D157200
2023-09-15 10:12:20 +02:00
Timm Bäder
d485fc40f3
[clang][Interp][NFC] Fix a comment typo
2023-09-15 09:55:52 +02:00
Timm Bäder
a259005a21
[clang][Interp] Convert logical binop operands to bool
...
Differential Revision: https://reviews.llvm.org/D157174
2023-09-15 09:52:41 +02:00
Timm Bäder
6d73cca186
[clang][Interp] Lazily visit unknown global declarations
...
In C, we don't get a evaluateAsInitializer() call for all global
declarations, yet we have to handle DeclRefExpr pointing to them.
Differential Revision: https://reviews.llvm.org/D156794
2023-09-15 08:50:21 +02:00
Timm Bäder
d61ba038a9
[clang][Interp][NFC] Call delegate() for the RHS of a comma op
2023-09-14 13:36:51 +02:00
Timm Bäder
293ae0b4b4
[clang][Interp] Actually consider ConstantExpr result
...
Since we have visitAPValue now, we might as well use it here.
Differential Revision: https://reviews.llvm.org/D158502
2023-09-14 09:27:56 +02:00
Timm Bäder
a7f256fb4c
[clang][Interp][NFC] Use delegate() once more
2023-09-13 17:08:40 +02:00
Timm Bäder
87461d6696
[clang][Interp] Implement __builtin_offsetof
...
Differential Revision: https://reviews.llvm.org/D156400
2023-09-11 12:03:47 +02:00
Timm Bäder
2744d9b649
[clang][Interp][NFC] Use delegate() vor ParenExprs
...
Now what we have delegate() we can use it here.
2023-09-09 11:07:56 +02:00
Timm Bäder
211f7ddbe1
[clang][Interp][NFC] Tiny indentation fix
2023-09-09 11:07:55 +02:00
Timm Bäder
f8074942c5
[clang][Interp] Fix SourceLocExpr used in CXXDefaultInitExprs
...
... when initializing.
Fixes a problem pointed out in https://reviews.llvm.org/D156045/
2023-09-09 07:28:50 +02:00
Timm Bäder
92ac46e703
[clang][Interp] Handle CXXParenListInitExprs
...
Differential Revision: https://reviews.llvm.org/D156047
2023-09-06 15:26:54 +02:00