Commit cf3c4f56 by Jakub Jelinek Committed by Jakub Jelinek

c-decl.c (build_compound_literal): Defer compound literal decls until until file…

c-decl.c (build_compound_literal): Defer compound literal decls until until file end to emit them only if...

	* c-decl.c (build_compound_literal): Defer compound literal decls
	until until file end to emit them only if they are actually used.

	* gcc.dg/gnu89-init-2.c: New test.

From-SVN: r55645
parent 9f8da5fa
2002-07-22 Jakub Jelinek <jakub@redhat.com>
* c-decl.c (build_compound_literal): Defer compound literal decls
until until file end to emit them only if they are actually used.
2002-07-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* ra-build.c (check_conflict_numbers): Hide unused function.
......
......@@ -3669,12 +3669,18 @@ build_compound_literal (type, init)
if (TREE_STATIC (decl))
{
/* This decl needs a name for the assembler output. We also need
a unique suffix to be added to the name, for which DECL_CONTEXT
must be set. */
DECL_NAME (decl) = get_identifier ("__compound_literal");
DECL_CONTEXT (decl) = complit;
a unique suffix to be added to the name. */
char *name;
extern int var_labelno;
ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal", var_labelno);
var_labelno++;
DECL_NAME (decl) = get_identifier (name);
DECL_DEFER_OUTPUT (decl) = 1;
DECL_COMDAT (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
pushdecl (decl);
rest_of_decl_compilation (decl, NULL, 1, 0);
DECL_CONTEXT (decl) = NULL_TREE;
}
return complit;
......
2002-07-22 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/gnu89-init-2.c: New test.
2002-07-21 Gabriel Dos Reis <gdr@nerim.net>
* gcc.dg/c90-arraydecl-1.c: Change C89 too C90.
......
/* Test whether __compound_literal.* objects are not emitted unless
they are actually needed. */
/* Origin: Jakub Jelinek <jakub@redhat.com> */
/* { dg-do compile } */
/* { dg-options "-std=gnu89 -O2" } */
/* { dg-final { scan-assembler-not "__compound_literal" } } */
struct A { int i; int j; int k[4]; };
struct B { };
struct C { int i; };
struct D { int i; struct C j; };
struct A a = (struct A) { .j = 6, .k[2] = 12 };
struct B b = (struct B) { };
int c[] = (int []) { [2] = 6, 7, 8 };
int d[] = (int [3]) { 1 };
int e[2] = (int []) { 1, 2 };
int f[2] = (int [2]) { 1 };
struct C g[3] = { [2] = (struct C) { 13 }, [1] = (const struct C) { 12 } };
struct D h = { .j = (struct C) { 15 }, .i = 14 };
struct D i[2] = { [1].j = (const struct C) { 17 },
[0] = { 0, (struct C) { 16 } } };
static const int *j = 1 ? (const int *) 0 : & (const int) { 26 };
int k = (int) sizeof ((int [6]) { 1, 2, 3, 4, 5, 6 }) + 4;
int l = (int) sizeof ((struct C) { 16 });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment