?? uninit-a.c
字號:
/* Inspired by part of java/parse.y. May be a real bug in CSE. *//* { dg-do compile } *//* { dg-options "-O2 -Wall" } */struct tree{ struct tree *car, *cdr, *wfl; int code; struct { unsigned int renp:1; unsigned int rtnp:1; unsigned int rpnp:1; } flags;};typedef struct tree *tree;#define NULL_TREE ((tree)0)/* Codes */enum{ CALL_EXPR, NEW_ARRAY_EXPR, NEW_CLASS_EXPR, CONVERT_EXPR, ARRAY_REF, CONDITIONAL_EXPR, STRING_CST, EXPR_WITH_FILE_LOCATION};/* Flags */#define RESOLVE_EXPRESSION_NAME_P(t) ((t)->flags.renp)#define RESOLVE_TYPE_NAME_P(t) ((t)->flags.rtnp)#define RESOLVE_PACKAGE_NAME_P(t) ((t)->flags.rpnp)/* Macros */#define EXPR_WFL_QUALIFICATION(t) ((t)->wfl)#define QUAL_WFL(t) ((t)->wfl)#define EXPR_WFL_NODE(t) ((t)->wfl)#define TREE_CODE(t) ((t)->code)#define TREE_OPERAND(t,x) ((t)->car)#define CLASSTYPE_SUPER(t) ((t)->car)#define IDENTIFIER_LOCAL_VALUE(t) ((t)->car)#define TREE_CHAIN(t) ((t)->cdr)#define QUAL_RESOLUTION(t) ((t)->cdr)extern tree current_class, this_identifier_node;extern tree super_identifier_node, length_identifier_node;tree resolve_and_layout (tree, tree);tree lookup_field_wrapper (tree, tree);voidqualify_ambiguous_name (id) tree id;{ tree qual, qual_wfl, decl; tree name; /* { dg-bogus "name" "uninitialized variable warning" } */ tree ptr_type; /* { dg-bogus "ptr_type" "uninitialized variable warning" } */ int again, new_array_found = 0; int super_found = 0, this_found = 0; qual = EXPR_WFL_QUALIFICATION (id); do { qual_wfl = QUAL_WFL (qual); switch (TREE_CODE (qual_wfl)) { case CALL_EXPR: qual_wfl = TREE_OPERAND (qual_wfl, 0); if (TREE_CODE (qual_wfl) != EXPR_WITH_FILE_LOCATION) { qual = EXPR_WFL_QUALIFICATION (qual_wfl); qual_wfl = QUAL_WFL (qual); } break; case NEW_ARRAY_EXPR: qual = TREE_CHAIN (qual); new_array_found = again = 1; continue; case NEW_CLASS_EXPR: case CONVERT_EXPR: qual_wfl = TREE_OPERAND (qual_wfl, 0); break; case ARRAY_REF: while (TREE_CODE (qual_wfl) == ARRAY_REF) qual_wfl = TREE_OPERAND (qual_wfl, 0); break; default: break; } name = EXPR_WFL_NODE (qual_wfl); ptr_type = current_class; again = 0; } while (again); /* If you put straightforward uses of name and ptr_type here instead of the if-else sequence below, the warnings go away. Therefore I suspect a real bug. */ if (!this_found && !super_found && (decl = IDENTIFIER_LOCAL_VALUE (name))) { RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1; QUAL_RESOLUTION (qual) = decl; } else if ((decl = lookup_field_wrapper (ptr_type, name)) || (new_array_found && name == length_identifier_node)) { RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1; QUAL_RESOLUTION (qual) = (new_array_found ? NULL_TREE : decl); } else if ((decl = resolve_and_layout (name, NULL_TREE))) { RESOLVE_TYPE_NAME_P (qual_wfl) = 1; QUAL_RESOLUTION (qual) = decl; } else if (TREE_CODE (QUAL_WFL (qual)) == CALL_EXPR || TREE_CODE (QUAL_WFL (qual)) == ARRAY_REF) RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1; else RESOLVE_PACKAGE_NAME_P (qual_wfl) = 1;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -