inline-params.c: New testcase.

* gcc.dg/guality/inline-params.c: New testcase.

	* dwarf2out.c (decl_loc_table_eq): Allow decl_loc_table to be NULL.
	(dwarf2out_abstract_function): NULLify decl_loc_table at begginig and
	restore at the end.

From-SVN: r151917
This commit is contained in:
Jan Hubicka 2009-09-21 14:48:37 +02:00 committed by Jan Hubicka
parent 9e2ceea07a
commit 5b5fba56fe
4 changed files with 61 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2009-09-21 Jan Hubicka <jh@suse.cz>
* dwarf2out.c (decl_loc_table_eq): Allow decl_loc_table to be NULL.
(dwarf2out_abstract_function): NULLify decl_loc_table at begginig and
restore at the end.
2009-09-21 Eric Botcazou <ebotcazou@adacore.com>
* stor-layout.c (layout_type): Remove obsolete code.

View File

@ -7491,6 +7491,8 @@ decl_loc_table_eq (const void *x, const void *y)
static inline var_loc_list *
lookup_decl_loc (const_tree decl)
{
if (!decl_loc_table)
return NULL;
return (var_loc_list *)
htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
}
@ -15533,16 +15535,22 @@ dwarf2out_abstract_function (tree decl)
tree save_fn;
tree context;
int was_abstract = DECL_ABSTRACT (decl);
htab_t old_decl_loc_table;
/* Make sure we have the actual abstract inline, not a clone. */
decl = DECL_ORIGIN (decl);
htab_empty (decl_loc_table);
old_die = lookup_decl_die (decl);
if (old_die && get_AT (old_die, DW_AT_inline))
/* We've already generated the abstract instance. */
return;
/* We can be called while recursively when seeing block defining inlined subroutine
DIE. Be sure to not clobber the outer location table nor use it or we would
get locations in abstract instantces. */
old_decl_loc_table = decl_loc_table;
decl_loc_table = NULL;
/* Be sure we've emitted the in-class declaration DIE (if any) first, so
we don't get confused by DECL_ABSTRACT. */
if (debug_info_level > DINFO_LEVEL_TERSE)
@ -15564,6 +15572,7 @@ dwarf2out_abstract_function (tree decl)
set_decl_abstract_flags (decl, 0);
current_function_decl = save_fn;
decl_loc_table = old_decl_loc_table;
pop_cfun ();
}

View File

@ -1,3 +1,7 @@
2009-09-21 Jan Hubicka <jh@suse.cz>
* gcc.dg/guality/inline-params.c: New testcase.
2009-09-21 Uros Bizjak <ubizjak@gmail.com>
* gcc.c-torture/execute/ieee/ieee.exp (additional_flags):

View File

@ -0,0 +1,41 @@
/* { dg-do run { xfail *-*-* } } */
/* IPA-SRA removes the argumet as dead, so we don't see their values. */
/* { dg-options "-g -fno-ipa-sra" } */
#define GUALITY_DONT_FORCE_LIVE_AFTER -1
#ifndef STATIC_INLINE
#define STATIC_INLINE /*static*/
#endif
#include "guality.h"
struct a{
struct b {int a;} b;
struct c{ int a;} c;
};
__attribute__ ((always_inline)) static inline void
t1 (struct b *ab, int b)
{
GUALCHKXPRVAL ("b", 0xbbb, 0);
GUALCHKVAL (ab);
}
__attribute__ ((always_inline)) static inline void
t2 (struct c *ac, char *msg)
{
GUALCHKVAL (ac);
GUALCHKVAL (msg);
}
__attribute__ ((always_inline)) static inline void
t3 (struct a *a)
{
t1(&a->b, 0xbbb);
t2(&a->c, "test");
}
struct a a={{0},{1}};
int
main (int argc, char *argv[])
{
t3(&a);
}