aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/c-pch.c7
-rw-r--r--gcc/c-typeck.c24
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/Wcxx-compat-14.c6
5 files changed, 40 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c21b72e..2291ec2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+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>
PR tree-optimization/40389
diff --git a/gcc/c-pch.c b/gcc/c-pch.c
index b4f7050..abdf4ab 100644
--- a/gcc/c-pch.c
+++ b/gcc/c-pch.c
@@ -1,5 +1,6 @@
/* 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.
@@ -92,7 +93,7 @@ static const char *
get_ident (void)
{
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";
memcpy (result, templ, IDENT_LENGTH);
@@ -112,7 +113,7 @@ pch_init (void)
FILE *f;
struct c_pch_validity v;
void *target_validity;
- static const char partial_pch[IDENT_LENGTH] = "gpcWrite";
+ static const char partial_pch[] = "gpcWrite";
#ifdef ASM_COMMENT_START
if (flag_verbose_asm)
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 07d51a4..0a40a88 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -5546,16 +5546,26 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype,
TREE_TYPE (inside_init) = type;
if (TYPE_DOMAIN (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
because it's ok to ignore the terminating null char
that is counted in the length of the constant. */
- && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
- TREE_STRING_LENGTH (inside_init)
- - (TYPE_PRECISION (typ1)
- / BITS_PER_UNIT)))
- pedwarn_init (init_loc, 0,
- "initializer-string for array of chars is too long");
+ if (0 > compare_tree_int (TYPE_SIZE_UNIT (type),
+ (len
+ - (TYPE_PRECISION (typ1)
+ / BITS_PER_UNIT))))
+ pedwarn_init (init_loc, 0,
+ ("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;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 42ec514..3e42e51 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+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>
* gcc.dg/func-ptr-conv-1.c: Update column info.
diff --git a/gcc/testsuite/gcc.dg/Wcxx-compat-14.c b/gcc/testsuite/gcc.dg/Wcxx-compat-14.c
new file mode 100644
index 0000000..2378371
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wcxx-compat-14.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Wc++-compat" } */
+
+char a1[] = "a";
+char a2[1] = "a"; /* { dg-warning "C\[+\]\[+\]" } */
+char a3[2] = "a";