On 11/08/2017 09:37 AM, Marek Polacek wrote:
> On Wed, Nov 08, 2017 at 08:07:42AM +0100, Martin Liška wrote:
>> diff --git a/gcc/gimplify.c b/gcc/gimplify.c
>> index c4fd5038d92..9563d825a6a 100644
>> --- a/gcc/gimplify.c
>> +++ b/gcc/gimplify.c
>> @@ -2223,7 +2223,8 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p,
>> bool *handled_ops_p,
>> while (!gsi_end_p (gsi2))
>> {
>> stmt = gsi_stmt (gsi2);
>> - if (gimple_code (stmt) == GIMPLE_LABEL)
>> + enum gimple_code gc = gimple_code (stmt);
>> + if (gc == GIMPLE_LABEL)
>> {
>> tree label = gimple_label_label (as_a <glabel *> (stmt));
>> if (gimple_has_location (stmt) && DECL_ARTIFICIAL (label))
>> @@ -2232,8 +2233,11 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p,
>> bool *handled_ops_p,
>> break;
>> }
>> }
>> + else if (gc == GIMPLE_CALL
>> + && gimple_call_internal_p (stmt, IFN_ASAN_MARK))
>> + ;
>
> I thought you could simply use gimple_call_internal_p (stmt, IFN_ASAN_MARK)
> here.
Hi Marek.
You're right! Are you fine with attached patch?
>
>> --- /dev/null
>> +++ b/gcc/testsuite/g++.dg/asan/pr82792.C
>> @@ -0,0 +1,32 @@
>> +/* PR sanitizer/82792 */
>> +/* { dg-do compile } */
>> +/* { dg-options "-fsanitize=address" } */
>
> And shouldn't this use -Wextra or -Wimplicit-fallthrough to check whether
> the warning is really gone?
I don't think so:
/home/marxin/Programming/gcc/gcc/testsuite/g++.dg/asan/pr82792.C: In function
‘int test(int, int)’:
/home/marxin/Programming/gcc/gcc/testsuite/g++.dg/asan/pr82792.C:25:7: warning:
attribute ‘fallthrough’ not preceding a case label or default label
__attribute ((fallthrough));
^~~~~~~~~~~
It's not driven by any -W...
Martin
>
> Marek
>
>From 2ce0450a68bc8024ab4cbc4eeb867fdeb1579a04 Mon Sep 17 00:00:00 2001
From: marxin <[email protected]>
Date: Wed, 8 Nov 2017 12:15:50 +0100
Subject: [PATCH] Simplify call of gimple_call_internal_p.
gcc/ChangeLog:
2017-11-08 Martin Liska <[email protected]>
* gimplify.c (expand_FALLTHROUGH_r): Simplify usage
of gimple_call_internal_p.
---
gcc/gimplify.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 9563d825a6a..e9168785fc0 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -2223,8 +2223,7 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
while (!gsi_end_p (gsi2))
{
stmt = gsi_stmt (gsi2);
- enum gimple_code gc = gimple_code (stmt);
- if (gc == GIMPLE_LABEL)
+ if (gimple_code (stmt) == GIMPLE_LABEL)
{
tree label = gimple_label_label (as_a <glabel *> (stmt));
if (gimple_has_location (stmt) && DECL_ARTIFICIAL (label))
@@ -2233,8 +2232,7 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
break;
}
}
- else if (gc == GIMPLE_CALL
- && gimple_call_internal_p (stmt, IFN_ASAN_MARK))
+ else if (gimple_call_internal_p (stmt, IFN_ASAN_MARK))
;
else
/* Something other is not expected. */
--
2.14.3