+2007-09-12 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/33382
+ * tree-ssa-structalias.c (get_constraint_for_component_ref):
+ Note that accesses to a whole flexible array member may not lead
+ to a subvariable.
+
2007-09-10 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/xtensa.c (xtensa_output_literal): Mask out high bits
+2007-09-12 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/33382
+ * gcc.c-torture/compile/pr33382.c: New testcase.
+ * gcc.c-torture/execute/pr33382.c: Likewise.
+
2007-09-06 Paolo Carlini <pcarlini@suse.de>
PR c++/32674
--- /dev/null
+typedef unsigned int size_t;
+typedef struct {
+ int disable;
+ char *searchconfig[];
+} config_t;
+typedef struct {
+ void *lng;
+} arglist_t;
+config_t config = {
+ .searchconfig = {
+ ((void *) 0)}
+};
+
+arglist_t arglist[] = {
+ {
+ &config.searchconfig[0]}
+};
+const int arglistsize = ((int) (sizeof(arglist) / sizeof(arglist_t)));
+void show_configuration(char *arg)
+{
+ int i;
+
+ if (!__extension__( {
+ size_t
+ __s1_len,
+ __s2_len; (__builtin_constant_p(arglist[i].lng)
+ && (__s1_len = (!((size_t)
+ (const void *)
+ 1)
+ || __s2_len >= 4))
+ ? : (__builtin_constant_p(arglist[i].lng)
+ && ((size_t)
+ (const void *)
+ 4)
+ ? (__builtin_constant_p(arg)
+ && ((size_t) (const void *) 1) ?
+ : (__extension__( {
+ __const * __s2 =
+ (__const *)
+ (arg);
+ register
+ __result =
+ (((__const
+ *) (arglist
+ [i].
+ lng))[0]
+ - __s2[0]);
+ if (__s1_len ==
+ 0) {
+ if (__s1_len ==
+ 0) {
+ __result =
+ (((__const
+ unsigned char
+ *) (__const
+ char
+ *)
+ (arglist[i].
+ lng))[3] -
+ __s2[3]);}
+ }
+ __result;}
+ ))):
+ (__builtin_constant_p(arg)
+ ?
+ (__builtin_constant_p
+ (arglist[i].lng)
+ ? : (__extension__( {
+ char
+ __result
+ =
+ ((__const
+ unsigned *)
+ (arg))[0];
+ if
+ (__s2_len
+ > 0
+ && __result ==
+ 0) {
+ if (__s2_len >
+ 1
+ && __result
+ == 0) {
+ }
+ }
+ __result;}
+ ))):
+
+
+
+ __builtin_strcmp(arglist[i].lng,
+ arg))));}
+ ))
+ return;
+}
--- /dev/null
+struct Foo {
+ int i;
+ int j[];
+};
+
+struct Foo x = { 1, { 2, 0, 2, 3 } };
+
+int foo(void)
+{
+ x.j[0] = 1;
+ return x.j[1];
+}
+
+extern void abort(void);
+
+int main()
+{
+ if (foo() != 0)
+ abort();
+ return 0;
+}
accessing *only* padding. */
/* Still the user could access one past the end of an array
embedded in a struct resulting in accessing *only* padding. */
- gcc_assert (curr || ref_contains_array_ref (orig_t));
+ gcc_assert (curr || TREE_CODE (TREE_TYPE (orig_t)) == ARRAY_TYPE
+ || ref_contains_array_ref (orig_t));
}
else if (bitmaxsize == 0)
{