This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 08/25/2017 03:05 PM, H.J. Lu wrote:
On Fri, Aug 25, 2017 at 1:14 PM, Martin Sebor <msebor@gmail.com> wrote:On 08/25/2017 01:35 PM, H.J. Lu wrote:On Fri, Aug 25, 2017 at 12:24 PM, Martin Sebor <msebor@gmail.com> wrote:On 08/25/2017 11:31 AM, H.J. Lu wrote:On Fri, Aug 25, 2017 at 10:15 AM, Martin Sebor <msebor@gmail.com> wrote:On 08/21/2017 06:21 AM, H.J. Lu wrote:When warn_if_not_aligned_p is true, a warning will be issued on function declaration later. There is no need to warn function alignment when warn_if_not_aligned_p is true. OK for trunk? H.J. -- * c-attribs.c (common_handle_aligned_attribute): Don't warn function alignment if warn_if_not_aligned_p is true. --- gcc/c-family/c-attribs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c index 5f79468407f..78969532543 100644 --- a/gcc/c-family/c-attribs.c +++ b/gcc/c-family/c-attribs.c @@ -1754,9 +1754,12 @@ common_handle_aligned_attribute (tree *node, tree args, int flags, This formally comes from the c++11 specification but we are doing it for the GNU attribute syntax as well. */ *no_add_attrs = true; - else if (TREE_CODE (decl) == FUNCTION_DECL + else if (!warn_if_not_aligned_p + && TREE_CODE (decl) == FUNCTION_DECL && DECL_ALIGN (decl) > (1U << i) * BITS_PER_UNIT) { + /* Don't warn function alignment here if warn_if_not_aligned_p is + true. It will be warned later. */ if (DECL_USER_ALIGN (decl)) error ("alignment for %q+D was previously specified as %d " "and may not be decreased", decl,Your comment refers to warning but the code here uses error(). That raises two questions for me: a) will the later diagnostic really be a warning or an error, and if a warning, under what option will it be issued? and b) why is an error appropriate here when a warning is appropriate elsewhere (most other attribute conflicts are at present diagnosed with -Wattributes).It can be changed to warning.Okay, that's goo to hear (it validates what I did in the patch I referenced). As for your patch, I don't quite see ho the block can ever be entered. In fact, I had to make changes to the function in my patch below to let it detect and diagnose the condition (attempting to reduce the alignment of a function). The details are in bug 81566. Did I miss something?Try this: __attribute__((warn_if_not_aligned(8))) void foo2 (void) { }For me the top of trunk prints the same error both with and without your patch: error: ‘warn_if_not_aligned’ may not be specified for ‘foo2’Please try it with Linux/alpha cross compiler.
I get the same error (both with and without your patch). Do I need to be using some specific options? (-Wif-not-aligned makes no difference.) I'm also not sure I understand how the target affects this case (is there supposed to be some other attribute on the declaration above? attribute aligned). I thought the handling of function declarations with the warn_if_not_aligned attribute was target independent. In any case, I think it would be easier if the patch included a test showing what the problem is and how the change prevents it. Martin
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |