diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-03-18 17:06:15 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-03-18 17:06:15 +0000 |
commit | f24ccada1c36c73aba9ace75bf69487bef4216bf (patch) | |
tree | d085647e97b62f96314401a16b2427b7029080a5 /gcc/function.c | |
parent | 0ac758f73d7757418f92a4468cf11cb5517f1b19 (diff) | |
download | gcc-f24ccada1c36c73aba9ace75bf69487bef4216bf.tar.gz |
PR debug/39485
* function.c (use_register_for_decl): When not optimizing, disregard
register keyword for variables with types containing methods.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144939 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/gcc/function.c b/gcc/function.c index 76d48347d48..e8d99015e4d 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -1942,7 +1942,28 @@ use_register_for_decl (const_tree decl) if (DECL_IGNORED_P (decl)) return true; - return (optimize || DECL_REGISTER (decl)); + if (optimize) + return true; + + if (!DECL_REGISTER (decl)) + return false; + + switch (TREE_CODE (TREE_TYPE (decl))) + { + case RECORD_TYPE: + case UNION_TYPE: + case QUAL_UNION_TYPE: + /* When not optimizing, disregard register keyword for variables with + types containing methods, otherwise the methods won't be callable + from the debugger. */ + if (TYPE_METHODS (TREE_TYPE (decl))) + return false; + break; + default: + break; + } + + return true; } /* Return true if TYPE should be passed by invisible reference. */ |