diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-10-21 09:53:40 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-10-21 09:53:40 +0000 |
commit | a5b1863e02065b553439fb9ec3984ac10ed58b76 (patch) | |
tree | 9768c9c789a7b2a0a685cf74859c95d943a2cae0 /gcc/tree.h | |
parent | fd0b369219de579092d49d8760e552bdb5765cf5 (diff) | |
download | gcc-a5b1863e02065b553439fb9ec3984ac10ed58b76.tar.gz |
* invoke.texi: Document -flang-isoc9x.
* Makefile.in (OBJS): Add splay-tree.o.
(c-common.o): Depend on rtl.h.
(splay-tree.o): List dependencies and provide build rule.
* rtl.h (record_alias_subset): New function.
* alias.c: Include splay-tree.h.
(alias_set_entry): New type.
(CHECK_ALIAS_SETS_FOR_CONSISTENCY): Remove.
(DIFFERENT_ALIAS_SETS_P): Use mem_in_disjoint_alias_sets_p.
(mems_in_disjoin_alias_sets_p): New function.
(alias_set_compare): Likewise.
(insert_subset_children): Likewise.
(get_alias_set_entry): Likewise.
* tree.h (TYPE_RESTRICT): New macro.
(TYPE_UNQUALIFIED): New manifest constant.
(TYPE_QUAL_CONST): Likewise
(TYPE_QUAL_VOLATILE): Likewise.
(TYPE_QUAL_RESTRICT): Likewise.
(tree_type): Add restrict_flag. Reduce count of free bits.
(DECL_POINTER_ALIAS_SET): New macro.
(DECL_POINTER_ALIAS_SET_KNOWN_P): Likewise.
(tree_decl): Add pointer_alias_set.
(build_qualified_type): New function.
(build_type_variant): Define in terms of build_qualified_type.
* tree.c (set_type_quals): New function.
(make_node): Initializae DECL_POINTER_ALIAS_SET.
(build_type_attribute_variant): Use build_qualified_type and
set_type_quals.
(build_type_variant): Rename, and modify, to become...
(build_qualified_type): New function.
(build_complex_type): Use set_type_quals.
* c-tree.h (C_TYPE_OBJECT_P): New macro.
(C_TYPE_FUNCTION_P): Likewise.
(C_TYPE_INCOMPLETE_P): Likewise.
(C_TYPE_OBJECT_OR_INCOMPLETE_P): Likewise.
(c_apply_type_quals_to_decl): New function.
(c_build_qualified_type): New function.
(c_build_type_variant): Define in terms of c_build_qualified_type.
(flag_isoc9x): Declare.
* c-typeck.c (qualify_type): Use c_build_qualified_type.
(common_type): Change to use TYPE_QUALS.
(comptypes): Likewise.
(convert_for_assignment): Likewise.
* c-aux-info.c (gen_type): Likewise. Deal with `restrict'.
* c-decl.c (flag_isoc9x): Define.
(c_decode_option): Handle -flang-isoc9x.
(grokdeclarator): Update to handle restrict. Use TYPE_QUALS,
c_build_qualified_type, etc. Use c_apply_type_quals_to_decl.
* c-lex.c (init_lex): Deal with restrict.
(init_lex): Don't treat restrict as a reserved word in
-traditional mode, or without -flang-isoc9x.
* c-lex.h (rid): Add RID_RESTRICT.
* c-parse.gperf (restrict, __restrict, __restrict__): Make
equivalent to RID_RESTRICT.
* c-parse.in (TYPE_QUAL): Update comment.
* c-common.c: Include rtl.h.
(c_find_base_decl): New function.
(c_build_type_variant): Rename, and modify, to become ...
(c_build_qualified_type): New function.
(c_apply_type_quals_to_decl): Likewise.
(c_get_alias_set): For INDIRECT_REFs, check to see if we can find
a particular alias set for the reference.
* toplev.c (documented_lang_options): Add -flang-isoc9x.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23212 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 58 |
1 files changed, 50 insertions, 8 deletions
diff --git a/gcc/tree.h b/gcc/tree.h index 8bd8df3368f..8dd784316df 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -830,6 +830,25 @@ struct tree_block /* Means this type is const-qualified. */ #define TYPE_READONLY(NODE) ((NODE)->common.readonly_flag) +/* If nonzero, this type is `restrict'-qualified, in the C sense of + the term. */ +#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag) + +/* There is a TYPE_QUAL value for each type qualifier. They can be + combined by bitwise-or to form the complete set of qualifiers for a + type. */ + +#define TYPE_UNQUALIFIED 0x0 +#define TYPE_QUAL_CONST 0x1 +#define TYPE_QUAL_VOLATILE 0x2 +#define TYPE_QUAL_RESTRICT 0x4 + +/* The set of type qualifiers for this type. */ +#define TYPE_QUALS(NODE) \ + ((TYPE_READONLY(NODE) * TYPE_QUAL_CONST) | \ + (TYPE_VOLATILE(NODE) * TYPE_QUAL_VOLATILE) | \ + (TYPE_RESTRICT(NODE) * TYPE_QUAL_RESTRICT)) + /* These flags are available for each language front end to use internally. */ #define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type.lang_flag_0) #define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type.lang_flag_1) @@ -881,6 +900,8 @@ struct tree_type unsigned needs_constructing_flag : 1; unsigned transparent_union_flag : 1; unsigned packed_flag : 1; + unsigned restrict_flag : 1; + unsigned lang_flag_0 : 1; unsigned lang_flag_1 : 1; unsigned lang_flag_2 : 1; @@ -888,7 +909,7 @@ struct tree_type unsigned lang_flag_4 : 1; unsigned lang_flag_5 : 1; unsigned lang_flag_6 : 1; - /* room for 4 more bits */ + /* room for 3 more bits */ unsigned int align; union tree_node *pointer_to; @@ -1244,6 +1265,16 @@ struct tree_type an address constant. */ #define DECL_NON_ADDR_CONST_P(NODE) (DECL_CHECK (NODE)->decl.non_addr_const_p) +/* Used to indicate an alias set for the memory pointed to by this + particular FIELD_DECL, PARM_DECL, or VAR_DECL, which must have + pointer (or reference) type. */ +#define DECL_POINTER_ALIAS_SET(NODE) \ + (DECL_CHECK (NODE)->decl.pointer_alias_set) + +/* Nonzero if an alias set has been assigned to this declaration. */ +#define DECL_POINTER_ALIAS_SET_KNOWN_P(NODE) \ + (DECL_POINTER_ALIAS_SET (NODE) != - 1) + struct tree_decl { char common[sizeof (struct tree_common)]; @@ -1316,6 +1347,7 @@ struct tree_decl HOST_WIDE_INT i; } saved_insns; union tree_node *vindex; + int pointer_alias_set; /* Points to a structure whose details depend on the language in use. */ struct lang_decl *lang_specific; }; @@ -1502,14 +1534,24 @@ extern tree lookup_attribute PROTO((char *, tree)); extern tree merge_attributes PROTO((tree, tree)); -/* Given a type node TYPE, and CONSTP and VOLATILEP, return a type - for the same kind of data as TYPE describes. - Variants point to the "main variant" (which has neither CONST nor VOLATILE) - via TYPE_MAIN_VARIANT, and it points to a chain of other variants - so that duplicate variants are never made. - Only main variants should ever appear as types of expressions. */ +/* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for + the same kind of data as TYPE describes. Variants point to the + "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT, + and it points to a chain of other variants so that duplicate + variants are never made. Only main variants should ever appear as + types of expressions. */ + +extern tree build_qualified_type PROTO((tree, int)); + +/* Like build_qualified_type, but only deals with the `const' and + `volatile' qualifiers. This interface is retained for backwards + compatiblity with the various front-ends; new code should use + build_qualified_type instead. */ -extern tree build_type_variant PROTO((tree, int, int)); +#define build_type_variant(TYPE, CONST_P, VOLATILE_P) \ + build_qualified_type (TYPE, \ + ((CONST_P) ? TYPE_QUAL_CONST : 0) \ + | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) /* Make a copy of a type node. */ |