Bug 18925 - [4.0 regression] Invalid gprel relocation in PIC
Summary: [4.0 regression] Invalid gprel relocation in PIC
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 4.0.0
: P2 normal
Target Milestone: 4.0.0
Assignee: Not yet assigned to anyone
URL:
Keywords: wrong-code
Depends on:
Blocks:
 
Reported: 2004-12-10 13:53 UTC by Andreas Schwab
Modified: 2005-07-23 22:49 UTC (History)
2 users (show)

See Also:
Host:
Target: ia64-*-linux
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andreas Schwab 2004-12-10 13:53:52 UTC
$ cat gprel.cc 
class __attribute__ ((visibility("default"))) Type 
{ 
 private: 
  static long _staticTypeCount; 
 public: 
  Type() { _staticTypeCount++; } 
  ~Type(); 
}; 
 
long Type::_staticTypeCount = 0; 
 
Type::~Type() 
{ 
 _staticTypeCount--; 
} 
$ gcc -fPIC -fvisibility=hidden -S gprel.cc 
$ grep _staticTypeCount gprel.s 
	.global _ZN4Type16_staticTypeCountE# 
	.type	_ZN4Type16_staticTypeCountE#, @object 
	.size	_ZN4Type16_staticTypeCountE#, 8 
_ZN4Type16_staticTypeCountE: 
	addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp 
	addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp 
	addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp 
	addl r14 = @gprel(_ZN4Type16_staticTypeCountE#), gp
Comment 1 Andreas Schwab 2004-12-10 16:23:24 UTC
Broken by 
 
2004-08-03  Mark Mitchell  <mark@codesourcery.com> 
 
	* class.c (build_vtable): Do not set DECL_VISIBILITY here. 
	(check_field_decls): Or here. 
	(check_methods): Or here. 
	(initialize_array): Don't mess with DECL_CONTEXT. 
	* cp-tree.h (start_decl): Adjust prototype. 
	(determine_visibility): New function. 
	* decl.c (duplicate_decls): Remove checks for hidden "operator 
	new". 
	(build_library_fn_1): Give all library functions default 
	visibility. 
	(start_decl): Add pop_scope_p parameter.  Tidy. 
	(cp_finish_decl): Do not pop scopes here.  Call 
	determine_visibility for variable definitions. 
	(start_preparsed_function): Call determine_visibility. 
	* decl2.c (determine_visibility): New function. 
	* method.c (use_thunk): Fix formatting. 
	* parser.c (cp_parser_condition): Adjust calls to start_decl. 
	(cp_parser_init_declarator): Likewise. 
	* pt.c (instantiate_decl): Always call pop_nested_class. 
	* rtti.c (get_tinfo_decl): Do not set DECL_VISIBILITY. 
	(tinfo_base_init): Likewise. 
 
Comment 2 GCC Commits 2004-12-14 02:16:07 UTC
Subject: Bug 18925

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	mmitchel@gcc.gnu.org	2004-12-14 02:15:56

Modified files:
	gcc/cp         : ChangeLog class.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/ext/visibility: staticdatamem.C 

Log message:
	PR c++/18925
	* class.c (layout_class_type): Determine the visibility of static
	data members.
	
	PR c++/18925
	* g++.dg/ext/visibility/staticdatamem.C: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4529&r2=1.4530
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/class.c.diff?cvsroot=gcc&r1=1.692&r2=1.693
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.4746&r2=1.4747
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/ext/visibility/staticdatamem.C.diff?cvsroot=gcc&r1=NONE&r2=1.1

Comment 3 Mark Mitchell 2004-12-14 02:18:51 UTC
Fixed in GCC 4.0.