This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug treelang/25341] New: tree_code_create_variable does not "handle" global variables properly
- From: "someone42 at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 Dec 2005 17:30:41 -0000
- Subject: [Bug treelang/25341] New: tree_code_create_variable does not "handle" global variables properly
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Although treelang does not support global variables, if support for them is
ever added, there might be a problem with tree_code_create_variable()
(treetree.c). Inside tree_code_create_variable() is the following switch:
switch (storage_class)
{
case STATIC_STORAGE:
TREE_STATIC (var_decl) = 1;
break;
case AUTOMATIC_STORAGE:
break;
case EXTERNAL_DEFINITION_STORAGE:
TREE_PUBLIC (var_decl) = 1;
break;
case EXTERNAL_REFERENCE_STORAGE:
DECL_EXTERNAL (var_decl) = 1;
break;
default:
gcc_unreachable ();
}
Calling tree_code_create_variable() with a storage class of
"EXTERNAL_DEFINITION_STORAGE" while in file scope does not create the global
variable properly. No allocation for the variable will be done, because the
TREE_STATIC property is set to 0, as if this were an "auto" variable.
Here is my diff for the fix, with an added check that there cannot be auto
global variables (applied to treetree.c of the GCC 4.0.2):
548a549,553
> if (current_function_decl == NULL_TREE)
> {
> error ("file-scope variable with automatic storage class");
> return error_mark_node;
> }
551a557,561
> if (current_function_decl == NULL_TREE)
> {
> /* Global extern variables cannot also be auto. */
> TREE_STATIC (var_decl) = 1;
> }
--
Summary: tree_code_create_variable does not "handle" global
variables properly
Product: gcc
Version: 4.0.2
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: treelang
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: someone42 at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25341