Commit 39a1ebb3 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/36282 (Spurious warning "asm declaration ignored due to…

re PR middle-end/36282 (Spurious warning "asm declaration ignored due to conflict with previous rename")

	PR middle-end/36282
	* c-pragma.c (apply_pragma_weak): Only look at
	TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) if
	DECL_ASSEMBLER_NAME_SET_P (decl).
	(maybe_apply_pending_pragma_weaks): Exit early if
	vec_safe_is_empty (pending_weaks) rather than only when
	!pending_weaks.
	(maybe_apply_pragma_weak): Likewise.  If !DECL_ASSEMBLER_NAME_SET_P,
	set assembler name back to NULL afterwards.

	* c-c++-common/pr36282-1.c: New test.
	* c-c++-common/pr36282-2.c: New test.
	* c-c++-common/pr36282-3.c: New test.
	* c-c++-common/pr36282-4.c: New test.

From-SVN: r208557
parent 3386d77e
2014-03-13 Jakub Jelinek <jakub@redhat.com>
PR middle-end/36282
* c-pragma.c (apply_pragma_weak): Only look at
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) if
DECL_ASSEMBLER_NAME_SET_P (decl).
(maybe_apply_pending_pragma_weaks): Exit early if
vec_safe_is_empty (pending_weaks) rather than only when
!pending_weaks.
(maybe_apply_pragma_weak): Likewise. If !DECL_ASSEMBLER_NAME_SET_P,
set assembler name back to NULL afterwards.
2014-03-11 Jason Merrill <jason@redhat.com>
* c.opt: Add -std=gnu++14.
......
......@@ -263,6 +263,7 @@ apply_pragma_weak (tree decl, tree value)
if (SUPPORTS_WEAK && DECL_EXTERNAL (decl) && TREE_USED (decl)
&& !DECL_WEAK (decl) /* Don't complain about a redundant #pragma. */
&& DECL_ASSEMBLER_NAME_SET_P (decl)
&& TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
warning (OPT_Wpragmas, "applying #pragma weak %q+D after first use "
"results in unspecified behavior", decl);
......@@ -280,7 +281,7 @@ maybe_apply_pragma_weak (tree decl)
/* Avoid asking for DECL_ASSEMBLER_NAME when it's not needed. */
/* No weak symbols pending, take the short-cut. */
if (!pending_weaks)
if (vec_safe_is_empty (pending_weaks))
return;
/* If it's not visible outside this file, it doesn't matter whether
it's weak. */
......@@ -292,7 +293,13 @@ maybe_apply_pragma_weak (tree decl)
if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
return;
id = DECL_ASSEMBLER_NAME (decl);
if (DECL_ASSEMBLER_NAME_SET_P (decl))
id = DECL_ASSEMBLER_NAME (decl);
else
{
id = DECL_ASSEMBLER_NAME (decl);
SET_DECL_ASSEMBLER_NAME (decl, NULL_TREE);
}
FOR_EACH_VEC_ELT (*pending_weaks, i, pe)
if (id == pe->name)
......@@ -313,7 +320,7 @@ maybe_apply_pending_pragma_weaks (void)
pending_weak *pe;
symtab_node *target;
if (!pending_weaks)
if (vec_safe_is_empty (pending_weaks))
return;
FOR_EACH_VEC_ELT (*pending_weaks, i, pe)
......
2014-03-13 Jakub Jelinek <jakub@redhat.com>
PR middle-end/36282
* c-c++-common/pr36282-1.c: New test.
* c-c++-common/pr36282-2.c: New test.
* c-c++-common/pr36282-3.c: New test.
* c-c++-common/pr36282-4.c: New test.
2014-03-13 Richard Henderson <rth@redhat.com>
PR debug/60438
......
/* PR middle-end/36282 */
/* { dg-do compile } */
#pragma weak bar
extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
void
foo (void)
{
}
/* PR middle-end/36282 */
/* { dg-do compile } */
extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
void
foo (void)
{
}
/* PR middle-end/36282 */
/* { dg-do compile } */
void bar (void);
#pragma weak bar
extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
void
foo (void)
{
}
/* PR middle-end/36282 */
/* { dg-do compile } */
#pragma weak bar
void bar (void);
extern void *baz (void *dest, const void *src, __SIZE_TYPE__ n);
extern __typeof (baz) baz __asm("bazfn"); /* { dg-bogus "asm declaration ignored due to conflict with previous rename" } */
void
foo (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