diff options
author | Jason Merrill <jason@redhat.com> | 2015-11-25 13:58:11 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2015-11-25 13:58:11 -0500 |
commit | 5546e1604519ca18e2e3f96f59ce636bb69d773a (patch) | |
tree | 424fed6e88da597f1acd33ddc6a02c4aef7f57e2 | |
parent | 917124c30204d37a19f0f32f1fa14b3ae0add3b1 (diff) | |
download | gcc-5546e1604519ca18e2e3f96f59ce636bb69d773a.zip gcc-5546e1604519ca18e2e3f96f59ce636bb69d773a.tar.gz gcc-5546e1604519ca18e2e3f96f59ce636bb69d773a.tar.bz2 |
re PR sanitizer/67941 (calls on function pointer from a captureless lambda cause ubsan warning)
PR c++/67941
* lambda.c (maybe_add_lambda_conv_op): Mark _FUN as
no_sanitize_undefined.
From-SVN: r230897
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/lambda.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ubsan/null-6.C | 5 |
3 files changed, 15 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 968482f..635db4e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2015-11-25 Jason Merrill <jason@redhat.com> + PR c++/67941 + * lambda.c (maybe_add_lambda_conv_op): Mark _FUN as + no_sanitize_undefined. + * cp-ubsan.c (cp_ubsan_instrument_vptr_p): Use do_ubsan_in_current_function. diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index 5fe3473..f9b686b 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -1053,6 +1053,12 @@ maybe_add_lambda_conv_op (tree type) if (generic_lambda_p) fn = add_inherited_template_parms (fn, DECL_TI_TEMPLATE (callop)); + /* Don't UBsan this function; we're deliberately calling op() with a null + object argument. */ + tree attrs = build_tree_list (get_identifier ("no_sanitize_undefined"), + NULL_TREE); + cplus_decl_attributes (&fn, attrs, 0); + add_method (type, fn, NULL_TREE); if (nested) diff --git a/gcc/testsuite/g++.dg/ubsan/null-6.C b/gcc/testsuite/g++.dg/ubsan/null-6.C new file mode 100644 index 0000000..2efe5c2 --- /dev/null +++ b/gcc/testsuite/g++.dg/ubsan/null-6.C @@ -0,0 +1,5 @@ +// PR c++/67941 +// { dg-do run { target c++11 } } +// { dg-options -fsanitize=null } + +int main(){ (+[](){})(); } |