Merge pull request #8876 from idryzhov/remove-pure

lib: remove pure attribute from functions that modify memory
This commit is contained in:
David Lamparter 2021-06-19 14:32:43 +02:00 committed by GitHub
commit ca4849b374
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 32 deletions

View File

@ -123,15 +123,6 @@ extern "C" {
#define assume(x)
#endif
/* pure = function does not modify memory & return value is the same if
* memory hasn't changed (=> allows compiler to optimize)
*
* Mostly autodetected by the compiler if function body is available (i.e.
* static inline functions in headers). Since that implies it should only be
* used in headers for non-inline functions, the "extern" is included here.
*/
#define ext_pure extern __attribute__((pure))
/* for helper functions defined inside macros */
#define macro_inline static inline __attribute__((unused))
#define macro_pure static inline __attribute__((unused, pure))

View File

@ -197,29 +197,25 @@ static inline void route_table_set_info(struct route_table *table, void *d)
table->info = d;
}
/* ext_pure => extern __attribute__((pure))
* does not modify memory (but depends on mem), allows compiler to optimize
*/
extern void route_table_finish(struct route_table *table);
ext_pure struct route_node *route_top(struct route_table *table);
ext_pure struct route_node *route_next(struct route_node *node);
ext_pure struct route_node *route_next_until(struct route_node *node,
const struct route_node *limit);
extern struct route_node *route_top(struct route_table *table);
extern struct route_node *route_next(struct route_node *node);
extern struct route_node *route_next_until(struct route_node *node,
const struct route_node *limit);
extern struct route_node *route_node_get(struct route_table *table,
union prefixconstptr pu);
ext_pure struct route_node *route_node_lookup(struct route_table *table,
union prefixconstptr pu);
ext_pure struct route_node *route_node_lookup_maynull(struct route_table *table,
union prefixconstptr pu);
ext_pure struct route_node *route_node_match(struct route_table *table,
union prefixconstptr pu);
ext_pure struct route_node *route_node_match_ipv4(struct route_table *table,
const struct in_addr *addr);
ext_pure struct route_node *route_node_match_ipv6(struct route_table *table,
const struct in6_addr *addr);
extern struct route_node *route_node_lookup(struct route_table *table,
union prefixconstptr pu);
extern struct route_node *route_node_lookup_maynull(struct route_table *table,
union prefixconstptr pu);
extern struct route_node *route_node_match(struct route_table *table,
union prefixconstptr pu);
extern struct route_node *route_node_match_ipv4(struct route_table *table,
const struct in_addr *addr);
extern struct route_node *route_node_match_ipv6(struct route_table *table,
const struct in6_addr *addr);
ext_pure unsigned long route_table_count(struct route_table *table);
extern unsigned long route_table_count(struct route_table *table);
extern struct route_node *route_node_create(route_table_delegate_t *delegate,
struct route_table *table);
@ -228,10 +224,10 @@ extern void route_node_destroy(route_table_delegate_t *delegate,
struct route_table *table,
struct route_node *node);
ext_pure struct route_node *route_table_get_next(struct route_table *table,
union prefixconstptr pu);
ext_pure int route_table_prefix_iter_cmp(const struct prefix *p1,
const struct prefix *p2);
extern struct route_node *route_table_get_next(struct route_table *table,
union prefixconstptr pu);
extern int route_table_prefix_iter_cmp(const struct prefix *p1,
const struct prefix *p2);
/*
* Iterator functions.