summaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2009-03-18 17:06:15 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2009-03-18 17:06:15 +0000
commitf24ccada1c36c73aba9ace75bf69487bef4216bf (patch)
treed085647e97b62f96314401a16b2427b7029080a5 /gcc/function.c
parent0ac758f73d7757418f92a4468cf11cb5517f1b19 (diff)
downloadgcc-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.c23
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. */