mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-19 06:20:27 +08:00
re PR tree-optimization/37345 (Segfault in decl_function_context (TYPE_MAIN_VARIANT))
PR tree-optimization/37345 PR tree-optimization/37358 PR tree-optimization/37357 * tree.c (build_function_type_skip_args): Build distinct type copy; set TYPE_CONTEXT. (build_function_decl_skip_args): Set type of new decl not orig decl; clear DECL_VINDEX for methods turned into functions. From-SVN: r139980
This commit is contained in:
parent
28e6bb130e
commit
4db15d75ec
@ -1,3 +1,13 @@
|
||||
2008-09-04 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR tree-optimization/37345
|
||||
PR tree-optimization/37358
|
||||
PR tree-optimization/37357
|
||||
* tree.c (build_function_type_skip_args): Build distinct type copy;
|
||||
set TYPE_CONTEXT.
|
||||
(build_function_decl_skip_args): Set type of new decl not orig decl;
|
||||
clear DECL_VINDEX for methods turned into functions.
|
||||
|
||||
2008-09-04 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* configure.ac (HAVE_GAS_LCOMM_WITH_ALIGNMENT): New assembler
|
||||
|
@ -1,3 +1,10 @@
|
||||
2008-09-03 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR tree-optimization/37345
|
||||
PR tree-optimization/37358
|
||||
PR tree-optimization/37357
|
||||
* g++.dg/torture/pr37345.c: New file.
|
||||
|
||||
2008-09-03 Tobias Grosser <grosser@fim.uni-passau.de>
|
||||
|
||||
* lib/target-supports.exp (check_effective_target_fgraphite): Fix test.
|
||||
|
15
gcc/testsuite/g++.dg/torture/pr37345.C
Normal file
15
gcc/testsuite/g++.dg/torture/pr37345.C
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-do compile } */
|
||||
class EbmlElement {
|
||||
virtual EbmlElement * Clone() const;
|
||||
};
|
||||
class KaxTracks : public EbmlElement {
|
||||
public:
|
||||
EbmlElement * Clone() const {
|
||||
return new KaxTracks(*this);
|
||||
}
|
||||
};
|
||||
KaxTracks kax_tracks;
|
||||
void finish_file(void)
|
||||
{
|
||||
kax_tracks.Clone();
|
||||
}
|
14
gcc/tree.c
14
gcc/tree.c
@ -5925,7 +5925,12 @@ build_function_type_skip_args (tree orig_type, bitmap args_to_skip)
|
||||
TYPE_ARG_TYPES (new_type) = new_reversed;
|
||||
}
|
||||
else
|
||||
new_type = build_function_type (TREE_TYPE (orig_type), new_reversed);
|
||||
{
|
||||
new_type
|
||||
= build_distinct_type_copy (build_function_type (TREE_TYPE (orig_type),
|
||||
new_reversed));
|
||||
TYPE_CONTEXT (new_type) = TYPE_CONTEXT (orig_type);
|
||||
}
|
||||
|
||||
/* This is a new type, not a copy of an old type. Need to reassociate
|
||||
variants. We can handle everything except the main variant lazily. */
|
||||
@ -5959,7 +5964,12 @@ build_function_decl_skip_args (tree orig_decl, bitmap args_to_skip)
|
||||
new_type = TREE_TYPE (orig_decl);
|
||||
if (prototype_p (new_type))
|
||||
new_type = build_function_type_skip_args (new_type, args_to_skip);
|
||||
TREE_TYPE (orig_decl) = new_type;
|
||||
TREE_TYPE (new_decl) = new_type;
|
||||
|
||||
/* For declarations setting DECL_VINDEX (i.e. methods)
|
||||
we expect first argument to be THIS pointer. */
|
||||
if (bitmap_bit_p (args_to_skip, 0))
|
||||
DECL_VINDEX (new_decl) = NULL_TREE;
|
||||
return new_decl;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user