From 80ca950ae786561318c29534d20cbe2e644c2ec2 Mon Sep 17 00:00:00 2001 From: Ziemowit Laski Date: Mon, 29 Jul 2019 15:41:41 -0700 Subject: [PATCH 1/4] Change `__builtin_types` to `__builtin_types_compatible_p` --- cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll index aeeb63ca6198..789c8acf6a8b 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll @@ -210,10 +210,10 @@ class BuiltInOperationIsUnion extends BuiltInOperation, @isunionexpr { } /** - * A C++ `__builtin_types` expression (used by some implementations of the type_traits header). + * A C++ `__builtin_types_compatible_p` expression (used by some implementations of the type_traits header). */ -class BuiltInOperationBuiltInTypes extends BuiltInOperation, @typescompexpr { - override string toString() { result = "__builtin_types" } +class BuiltInOperationBuiltInTypesCompatibleP extends BuiltInOperation, @typescompexpr { + override string toString() { result = "__builtin_types_compatible_p" } } /** From 889408be8fcca66e84aaf9bf17f4760fcbae74dc Mon Sep 17 00:00:00 2001 From: Ziemowit Laski Date: Mon, 29 Jul 2019 17:17:42 -0700 Subject: [PATCH 2/4] Add test case. --- .../library-tests/builtins/builtins/builtins.expected | 2 ++ cpp/ql/test/library-tests/builtins/builtins/types.c | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100644 cpp/ql/test/library-tests/builtins/builtins/types.c diff --git a/cpp/ql/test/library-tests/builtins/builtins/builtins.expected b/cpp/ql/test/library-tests/builtins/builtins/builtins.expected index 046944ee078f..48007d6b0e18 100644 --- a/cpp/ql/test/library-tests/builtins/builtins/builtins.expected +++ b/cpp/ql/test/library-tests/builtins/builtins/builtins.expected @@ -1,4 +1,6 @@ | choose_expr.c:3:13:3:42 | __builtin_choose_expr | +| types.c:4:9:4:57 | __builtin_types_compatible_p | +| types.c:6:16:6:65 | __builtin_types_compatible_p | | varargs.c:7:5:7:32 | __builtin_va_start | | varargs.c:9:13:9:37 | __builtin_va_arg | | varargs.c:11:5:11:24 | __builtin_va_end | diff --git a/cpp/ql/test/library-tests/builtins/builtins/types.c b/cpp/ql/test/library-tests/builtins/builtins/types.c new file mode 100644 index 000000000000..258d36b18a8b --- /dev/null +++ b/cpp/ql/test/library-tests/builtins/builtins/types.c @@ -0,0 +1,11 @@ + +int main(int argc, char **argv) { + char *s; + if (__builtin_types_compatible_p(__typeof__(s), long)) { + puts("long"); + } else if (__builtin_types_compatible_p(__typeof__(s), char*)) { + puts("str"); + } + return (0); +}; + From 2abf7681e05f075c72a9e8a7e9fac25be7197f72 Mon Sep 17 00:00:00 2001 From: Ziemowit Laski Date: Mon, 29 Jul 2019 19:43:18 -0700 Subject: [PATCH 3/4] Point the old BuiltInOperationBuiltInTypes at our new BuiltInOperationBuiltInTypesCompatibleP, for backward compatibility. --- cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll index 789c8acf6a8b..787a1e316490 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll @@ -209,6 +209,11 @@ class BuiltInOperationIsUnion extends BuiltInOperation, @isunionexpr { override string toString() { result = "__is_union" } } +/** + * DEPRECATED: Use `BuiltInOperationBuiltInTypesCompatibleP instead. + */ +deprecated class BuiltInOperationBuiltInTypes = BuiltInOperationBuiltInTypesCompatibleP; + /** * A C++ `__builtin_types_compatible_p` expression (used by some implementations of the type_traits header). */ From 075e4ab1590f498dba0e90e3dd31b9d96106f89f Mon Sep 17 00:00:00 2001 From: zlaski-semmle <48528981+zlaski-semmle@users.noreply.github.com> Date: Tue, 30 Jul 2019 11:39:42 -0700 Subject: [PATCH 4/4] Update cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll Co-Authored-By: Dave Bartolomeo <42150477+dave-bartolomeo@users.noreply.github.com> --- cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll index 787a1e316490..b104c2d2d9b5 100644 --- a/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll +++ b/cpp/ql/src/semmle/code/cpp/exprs/BuiltInOperations.qll @@ -210,7 +210,7 @@ class BuiltInOperationIsUnion extends BuiltInOperation, @isunionexpr { } /** - * DEPRECATED: Use `BuiltInOperationBuiltInTypesCompatibleP instead. + * DEPRECATED: Use `BuiltInOperationBuiltInTypesCompatibleP` instead. */ deprecated class BuiltInOperationBuiltInTypes = BuiltInOperationBuiltInTypesCompatibleP;