Commit 5eb4df45 by Ian Lance Taylor Committed by Ian Lance Taylor

c-pch.c (get_ident): Don't set size of templ array.

./:	* c-pch.c (get_ident): Don't set size of templ array.
	(pch_init): Don't set size of partial_pch array.

	* c-typeck.c (digest_init): If -Wc++-compat, warn about using a
	string constant to intialize an array whose size is the length of
	the string.
testsuite/:
	* gcc.dg/Wcxx-compat-14.c: New testcase.

From-SVN: r148611
parent 6958c780
2009-06-17 Ian Lance Taylor <iant@google.com>
* c-pch.c (get_ident): Don't set size of templ array.
(pch_init): Don't set size of partial_pch array.
* c-typeck.c (digest_init): If -Wc++-compat, warn about using a
string constant to intialize an array whose size is the length of
the string.
2009-06-17 Richard Guenther <rguenther@suse.de> 2009-06-17 Richard Guenther <rguenther@suse.de>
PR tree-optimization/40389 PR tree-optimization/40389
......
/* Precompiled header implementation for the C languages. /* Precompiled header implementation for the C languages.
Copyright (C) 2000, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Copyright (C) 2000, 2002, 2003, 2004, 2005, 2007, 2008, 2009
Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -92,7 +93,7 @@ static const char * ...@@ -92,7 +93,7 @@ static const char *
get_ident (void) get_ident (void)
{ {
static char result[IDENT_LENGTH]; static char result[IDENT_LENGTH];
static const char templ[IDENT_LENGTH] = "gpch.013"; static const char templ[] = "gpch.013";
static const char c_language_chars[] = "Co+O"; static const char c_language_chars[] = "Co+O";
memcpy (result, templ, IDENT_LENGTH); memcpy (result, templ, IDENT_LENGTH);
...@@ -112,7 +113,7 @@ pch_init (void) ...@@ -112,7 +113,7 @@ pch_init (void)
FILE *f; FILE *f;
struct c_pch_validity v; struct c_pch_validity v;
void *target_validity; void *target_validity;
static const char partial_pch[IDENT_LENGTH] = "gpcWrite"; static const char partial_pch[] = "gpcWrite";
#ifdef ASM_COMMENT_START #ifdef ASM_COMMENT_START
if (flag_verbose_asm) if (flag_verbose_asm)
......
...@@ -5546,16 +5546,26 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype, ...@@ -5546,16 +5546,26 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype,
TREE_TYPE (inside_init) = type; TREE_TYPE (inside_init) = type;
if (TYPE_DOMAIN (type) != 0 if (TYPE_DOMAIN (type) != 0
&& TYPE_SIZE (type) != 0 && TYPE_SIZE (type) != 0
&& TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
{
unsigned HOST_WIDE_INT len = TREE_STRING_LENGTH (inside_init);
/* Subtract the size of a single (possibly wide) character /* Subtract the size of a single (possibly wide) character
because it's ok to ignore the terminating null char because it's ok to ignore the terminating null char
that is counted in the length of the constant. */ that is counted in the length of the constant. */
&& 0 > compare_tree_int (TYPE_SIZE_UNIT (type), if (0 > compare_tree_int (TYPE_SIZE_UNIT (type),
TREE_STRING_LENGTH (inside_init) (len
- (TYPE_PRECISION (typ1) - (TYPE_PRECISION (typ1)
/ BITS_PER_UNIT))) / BITS_PER_UNIT))))
pedwarn_init (init_loc, 0, pedwarn_init (init_loc, 0,
"initializer-string for array of chars is too long"); ("initializer-string for array of chars "
"is too long"));
else if (warn_cxx_compat
&& 0 > compare_tree_int (TYPE_SIZE_UNIT (type), len))
warning_at (init_loc, OPT_Wc___compat,
("initializer-string for array chars "
"is too long for C++"));
}
return inside_init; return inside_init;
} }
......
2009-06-17 Ian Lance Taylor <iant@google.com>
* gcc.dg/Wcxx-compat-14.c: New testcase.
2009-06-17 Aldy Hernandez <aldyh@redhat.com> 2009-06-17 Aldy Hernandez <aldyh@redhat.com>
* gcc.dg/func-ptr-conv-1.c: Update column info. * gcc.dg/func-ptr-conv-1.c: Update column info.
......
/* { dg-do compile } */
/* { dg-options "-Wc++-compat" } */
char a1[] = "a";
char a2[1] = "a"; /* { dg-warning "C\[+\]\[+\]" } */
char a3[2] = "a";
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