@@ -202,6 +202,27 @@ class BuiltInOperationBuiltInShuffleVector extends BuiltInOperation, @builtinshu
202202 override string toString ( ) { result = "__builtin_shufflevector" }
203203}
204204
205+ /**
206+ * A clang `__builtin_convertvector` expression.
207+ */
208+ class BuiltInOperationBuiltInConvertVector extends BuiltInOperation , @builtinconvertvector {
209+ override string toString ( ) { result = "__builtin_convertvector" }
210+ }
211+
212+ /**
213+ * A clang `__builtin_addressof` expression (can be used to implement C++'s std::addressof).
214+ */
215+ class BuiltInOperationBuiltInAddressOf extends UnaryOperation , BuiltInOperation , @builtinaddressof {
216+ /** Gets the function or variable whose address is taken. */
217+ Declaration getAddressable ( ) {
218+ result = this .getOperand ( ) .( Access ) .getTarget ( )
219+ // this handles the case where we are taking the address of a reference variable
220+ or result = this .getOperand ( ) .( ReferenceDereferenceExpr ) .getChild ( 0 ) .( Access ) .getTarget ( )
221+ }
222+
223+ override string getOperator ( ) { result = "__builtin_addressof" }
224+ }
225+
205226/**
206227 * The `__is_trivially_constructible` type trait.
207228 */
@@ -369,3 +390,10 @@ class BuiltInOperationIsFinal extends BuiltInOperation, @isfinalexpr {
369390class BuiltInChooseExpr extends BuiltInOperation , @builtinchooseexpr {
370391 override string toString ( ) { result = "__builtin_choose_expr" }
371392}
393+
394+ /**
395+ * Fill operation on a GNU vector.
396+ */
397+ class VectorFillOperation extends UnaryOperation , @vec_fill {
398+ override string getOperator ( ) { result = "(vector fill)" }
399+ }
0 commit comments