re PR target/39558 (Bad interaction of decls named 'vector' and -maltivec vector support)

PR target/39558
	* macro.c (cpp_get_token): If macro_to_expand returns NULL
	and used some tokens, add CPP_PADDING before next token.

	* gcc.target/powerpc/altivec-29.c: New test.

From-SVN: r145298
This commit is contained in:
Jakub Jelinek 2009-03-30 17:06:14 +02:00 committed by Jakub Jelinek
parent 76d9111c42
commit 367c2a77d8
4 changed files with 63 additions and 5 deletions

View File

@ -2,6 +2,9 @@
* gfortran.dg/bind_c_usage_19.f90: New test.
PR target/39558
* gcc.target/powerpc/altivec-29.c: New test.
2009-03-29 H.J. Lu <hongjiu.lu@intel.com>
Backport from mainline:

View File

@ -0,0 +1,23 @@
/* PR target/39558 */
/* { dg-do compile { target powerpc*-*-* } } */
/* { dg-require-effective-target powerpc_altivec_ok } */
/* { dg-options "-maltivec -save-temps" } */
#define ATTRIBUTE_UNUSED __attribute__((unused))
int *foo (int *vector)
{
return vector;
}
int *bar (int *vector ATTRIBUTE_UNUSED)
{
return vector;
}
int *baz (int *vector __attribute__((unused)))
{
return vector;
}
/* { dg-final { cleanup-saved-temps } } */

View File

@ -1,3 +1,9 @@
2009-03-30 Jakub Jelinek <jakub@redhat.com>
PR target/39558
* macro.c (cpp_get_token): If macro_to_expand returns NULL
and used some tokens, add CPP_PADDING before next token.
2009-03-28 Joseph Myers <joseph@codesourcery.com>
* Makefile.in (po/$(PACKAGE).pot): Use $(mkinstalldirs) not

View File

@ -1,7 +1,7 @@
/* Part of CPP library. (Macro and #define handling.)
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008 Free Software Foundation, Inc.
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987
@ -1260,10 +1260,36 @@ cpp_get_token (cpp_reader *pfile)
/* Conditional macros require that a predicate be evaluated
first. */
if (((!(node->flags & NODE_CONDITIONAL))
|| (pfile->cb.macro_to_expand
&& (node = pfile->cb.macro_to_expand (pfile, result))))
&& (ret = enter_macro_context (pfile, node, result)))
if ((node->flags & NODE_CONDITIONAL) != 0)
{
if (pfile->cb.macro_to_expand)
{
bool whitespace_after;
const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
whitespace_after = (peek_tok->type == CPP_PADDING
|| (peek_tok->flags & PREV_WHITE));
node = pfile->cb.macro_to_expand (pfile, result);
if (node)
ret = enter_macro_context (pfile, node, result);
else if (whitespace_after)
{
/* If macro_to_expand hook returned NULL and it
ate some tokens, see if we don't need to add
a padding token in between this and the
next token. */
peek_tok = cpp_peek_token (pfile, 0);
if (peek_tok->type != CPP_PADDING
&& (peek_tok->flags & PREV_WHITE) == 0)
_cpp_push_token_context (pfile, NULL,
padding_token (pfile,
peek_tok), 1);
}
}
}
else
ret = enter_macro_context (pfile, node, result);
if (ret)
{
if (pfile->state.in_directive || ret == 2)
continue;