re PR debug/31510 (FAIL: libgomp.fortran/threadprivate[23].f90 -O3 -g)
authorJames E Wilson <wilson@tuliptree.org>
Sun, 16 Mar 2008 15:48:09 +0000 (15:48 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sun, 16 Mar 2008 15:48:09 +0000 (15:48 +0000)
PR debug/31510
* dbxout.c (dbxout_expand_expr, case VAR_DECL): Return NULL for
emulated thread local variables.

From-SVN: r133274

gcc/ChangeLog
gcc/dbxout.c

index 58d47850c1868532044d4c2e410057a4ffd0b19b..fa2ed097f625f90f867fc7bd6cdff8ef799a4682 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-16  James E. Wilson  <wilson@tuliptree.org>
+
+       PR debug/31510
+       * dbxout.c (dbxout_expand_expr, case VAR_DECL): Return NULL for
+       emulated thread local variables.
+
 2008-03-16  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/35607
index ad1b3c76eddf13afe9acf08eb5c25a1dc4986aad..8b11a9a371d0c1bfc4eb8db869d363056e023134 100644 (file)
@@ -2332,6 +2332,15 @@ dbxout_expand_expr (tree expr)
   switch (TREE_CODE (expr))
     {
     case VAR_DECL:
+      /* We can't handle emulated tls variables, because the address is an
+        offset to the return value of __emutls_get_address, and there is no
+        way to express that in stabs.  Also, there are name mangling issues
+        here.  We end up with references to undefined symbols if we don't
+        disable debug info for these variables.  */
+      if (!targetm.have_tls && DECL_THREAD_LOCAL_P (expr))
+       return NULL;
+      /* FALLTHRU */
+
     case PARM_DECL:
       if (DECL_HAS_VALUE_EXPR_P (expr))
        return dbxout_expand_expr (DECL_VALUE_EXPR (expr));