aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2015-11-25 13:58:11 -0500
committerJason Merrill <jason@gcc.gnu.org>2015-11-25 13:58:11 -0500
commit5546e1604519ca18e2e3f96f59ce636bb69d773a (patch)
tree424fed6e88da597f1acd33ddc6a02c4aef7f57e2 /gcc/cp
parent917124c30204d37a19f0f32f1fa14b3ae0add3b1 (diff)
downloadgcc-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
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/lambda.c6
2 files changed, 10 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)