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:
parent
9e2ceea07a
commit
5b5fba56fe
|
@ -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.
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue