Skip to content

Commit

Permalink
Merge pull request #8885 from FRRouting/mergify/bp/stable/7.3/pr-8876
Browse files Browse the repository at this point in the history
lib: remove pure attribute from functions that modify memory (backport #8876)
  • Loading branch information
donaldsharp committed Jun 19, 2021
2 parents 092b787 + 5586f42 commit 97935a2
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 33 deletions.
9 changes: 0 additions & 9 deletions lib/compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,15 +108,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))
Expand Down
44 changes: 20 additions & 24 deletions lib/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

ext_pure unsigned long route_table_count(struct route_table *table);
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);

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);
Expand All @@ -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.
Expand Down

0 comments on commit 97935a2

Please sign in to comment.