Commit 19916065 by Martin Liska Committed by Martin Liska

Support LLVM style of no_sanitize attribute (PR sanitizer/85556).

2018-05-11  Martin Liska  <mliska@suse.cz>

        PR sanitizer/85556
	* doc/extend.texi: Document LLVM style format for no_sanitize
	attribute.
2018-05-11  Martin Liska  <mliska@suse.cz>

        PR sanitizer/85556
	* c-attribs.c (handle_no_sanitize_attribute): Iterate all
	TREE_LIST values.
2018-05-11  Martin Liska  <mliska@suse.cz>

        PR sanitizer/85556
	* c-c++-common/ubsan/attrib-6.c: New test.

From-SVN: r260154
parent 683be2f7
2018-05-11 Martin Liska <mliska@suse.cz>
PR sanitizer/85556
* doc/extend.texi: Document LLVM style format for no_sanitize
attribute.
2018-05-10 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/rs6000.c (mode_supports_dq_form): Rename
......
2018-05-11 Martin Liska <mliska@suse.cz>
PR sanitizer/85556
* c-attribs.c (handle_no_sanitize_attribute): Iterate all
TREE_LIST values.
2018-05-10 Jakub Jelinek <jakub@redhat.com>
PR c++/85662
......
......@@ -403,7 +403,7 @@ const struct attribute_spec c_common_attribute_table[] =
0, 0, true, false, false, false,
handle_no_address_safety_analysis_attribute,
NULL },
{ "no_sanitize", 1, 1, true, false, false, false,
{ "no_sanitize", 1, -1, true, false, false, false,
handle_no_sanitize_attribute, NULL },
{ "no_sanitize_address", 0, 0, true, false, false, false,
handle_no_sanitize_address_attribute, NULL },
......@@ -683,22 +683,26 @@ static tree
handle_no_sanitize_attribute (tree *node, tree name, tree args, int,
bool *no_add_attrs)
{
unsigned int flags = 0;
*no_add_attrs = true;
tree id = TREE_VALUE (args);
if (TREE_CODE (*node) != FUNCTION_DECL)
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
return NULL_TREE;
}
if (TREE_CODE (id) != STRING_CST)
for (; args; args = TREE_CHAIN (args))
{
error ("no_sanitize argument not a string");
return NULL_TREE;
}
tree id = TREE_VALUE (args);
if (TREE_CODE (id) != STRING_CST)
{
error ("no_sanitize argument not a string");
return NULL_TREE;
}
char *string = ASTRDUP (TREE_STRING_POINTER (id));
unsigned int flags = parse_no_sanitize_attribute (string);
char *string = ASTRDUP (TREE_STRING_POINTER (id));
flags |= parse_no_sanitize_attribute (string);
}
add_no_sanitize_value (*node, flags);
......
......@@ -2977,6 +2977,8 @@ mentioned in @var{sanitize_option}. A list of values acceptable by
@smallexample
void __attribute__ ((no_sanitize ("alignment", "object-size")))
f () @{ /* @r{Do something.} */; @}
void __attribute__ ((no_sanitize ("alignment,object-size")))
g () @{ /* @r{Do something.} */; @}
@end smallexample
@item no_sanitize_address
......
2018-05-11 Martin Liska <mliska@suse.cz>
PR sanitizer/85556
* c-c++-common/ubsan/attrib-6.c: New test.
2018-05-10 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/85687
......
/* { dg-do compile } */
/* { dg-options "-fsanitize=undefined" } */
static void __attribute__((no_sanitize("foobar")))
foo (void) { /* { dg-warning "attribute directive ignored" } */
}
static void __attribute__((no_sanitize("address,undefined")))
foo2 (void) {
}
static void __attribute__((no_sanitize("address", "undefined")))
foo3 (void) {
}
static void __attribute__((no_sanitize("address", "address", "")))
foo4 (void) {
}
static void __attribute__((no_sanitize("address", "address", "address,address")))
foo5 (void) {
}
static void __attribute__((no_sanitize("address", "address,kernel-address,thread,leak,undefined,vptr,shift,integer-divide-by-zero,unreachable,vla-bound,null,return,signed-integer-overflow,bounds,bounds-strict,alignment,object-size,float-divide-by-zero,float-cast-overflow,nonnull-attribute,returns-nonnull-attribute,bool,enum")))
foo6 (void) {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment