re PR lto/52605 (LTO -g ICE when looking up context of VMTs of classes defined within functions)
2012-05-02 Martin Jambor <mjambor@suse.cz> PR lto/52605 * dwarf2out.c (dwarf2out_decl): Only lookup die representing context of a variable when the contect is a function. * gcc/testsuite/g++.dg/lto/pr52605_0.C: New test. From-SVN: r187063
This commit is contained in:
parent
40f93bb5be
commit
d282264edf
@ -1,3 +1,9 @@
|
||||
2012-05-02 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR lto/52605
|
||||
* dwarf2out.c (dwarf2out_decl): Only lookup die representing context
|
||||
of a variable when the contect is a function.
|
||||
|
||||
2012-05-02 Michael Matz <matz@suse.de>
|
||||
|
||||
* coretypes.h (gimple_seq, const_gimple_seq): Typedef as gimple.
|
||||
|
@ -19122,7 +19122,9 @@ dwarf2out_decl (tree decl)
|
||||
return;
|
||||
|
||||
/* For local statics lookup proper context die. */
|
||||
if (TREE_STATIC (decl) && decl_function_context (decl))
|
||||
if (TREE_STATIC (decl)
|
||||
&& DECL_CONTEXT (decl)
|
||||
&& TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
|
||||
context_die = lookup_decl_die (DECL_CONTEXT (decl));
|
||||
|
||||
/* If we are in terse mode, don't generate any DIEs to represent any
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-05-02 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR lto/52605
|
||||
* g++.dg/lto/pr52605_0.C: New test.
|
||||
|
||||
2012-05-02 Kirill Yukhin <kirill.yukhin@intel.com>
|
||||
|
||||
* gcc.target/i386/hle-cmpxchg-acq-1.c: New.
|
||||
|
39
gcc/testsuite/g++.dg/lto/pr52605_0.C
Normal file
39
gcc/testsuite/g++.dg/lto/pr52605_0.C
Normal file
@ -0,0 +1,39 @@
|
||||
// { dg-lto-do link }
|
||||
// { dg-lto-options {{-flto -g}} }
|
||||
|
||||
extern "C" void abort (void);
|
||||
|
||||
class A
|
||||
{
|
||||
public:
|
||||
virtual int foo (int i);
|
||||
};
|
||||
|
||||
int A::foo (int i)
|
||||
{
|
||||
return i + 1;
|
||||
}
|
||||
|
||||
int __attribute__ ((noinline,noclone)) get_input(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
|
||||
class B : public A
|
||||
{
|
||||
public:
|
||||
int bar (int i)
|
||||
{
|
||||
return foo (i) + 2;
|
||||
}
|
||||
};
|
||||
class B b;
|
||||
|
||||
if (b.bar (get_input ()) != 4)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user