Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 75680db

Browse files
authored
Merge branch 'next' into qlucie/master
2 parents 57f3ac8 + 314e1a1 commit 75680db

25 files changed

Lines changed: 3751 additions & 3726 deletions

File tree

cpp/ql/src/META-INF/MANIFEST.MF

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: Semmle C/C++ Default Queries
44
Bundle-SymbolicName: com.semmle.plugin.semmlecode.cpp.queries;singleton:=true
5-
Bundle-Version: 1.18.0.qualifier
5+
Bundle-Version: 1.19.0.qualifier
66
Bundle-Vendor: Semmle Ltd.
77
Bundle-ActivationPolicy: lazy
8-
Require-Bundle: com.semmle.plugin.qdt.ui;bundle-version="[1.18.0.qualifier,1.18.0.qualifier]"
8+
Require-Bundle: com.semmle.plugin.qdt.ui;bundle-version="[1.19.0.qualifier,1.19.0.qualifier]"

cpp/ql/src/semmle/code/cpp/Class.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,12 @@ class Class extends UserType {
418418
*/
419419
predicate isPOD() { is_pod_class(underlyingElement(this)) }
420420

421+
/**
422+
* Holds if this class is a standard-layout class [N4140 9(7)]. Also holds
423+
* for structs in C programs.
424+
*/
425+
predicate isStandardLayout() { is_standard_layout_class(underlyingElement(this)) }
426+
421427
/**
422428
* Holds if this class is abstract, in other words whether it declares one
423429
* or more pure virtual member functions.

cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 {
369390
class 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+
}

cpp/ql/src/semmlecode.cpp.dbscheme

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,7 @@ usertype_uuid(
691691
);
692692

693693
is_pod_class(unique int id: @usertype ref);
694+
is_standard_layout_class(unique int id: @usertype ref);
694695

695696
is_complete(unique int id: @usertype ref);
696697

@@ -1429,6 +1430,9 @@ case @expr.kind of
14291430
| 319 = @noexceptexpr
14301431
| 320 = @builtinshufflevector
14311432
| 321 = @builtinchooseexpr
1433+
| 322 = @builtinaddressof
1434+
| 323 = @vec_fill
1435+
| 324 = @builtinconvertvector
14321436
;
14331437

14341438
new_allocated_type(

0 commit comments

Comments
 (0)