https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32911
Matthew Wilcox <matthew at wil dot cx> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |matthew at wil dot cx --- Comment #6 from Matthew Wilcox <matthew at wil dot cx> --- I actually have a use for a real idempotent function, that is f(f(x)) == f(x). I think it's different from the behaviour wanted here which is more of an initialiser functionality. The concrete example is Linux's compound_head() macro which takes a pointer to a struct page and returns a pointer to a (potentially different) struct page. A page is its own head, and calls to compound_head can be buried inside macros. So I'd like gcc to know that given this program: struct page *compound_head(struct page *) __attribute__((idempotent)); int g(struct page *page) { struct page *head = compound_head(page); return page->refcount; } int f(struct page *page) { struct page *head = compound_head(page); return g(head); } if it inlines g() into f(), it only needs to make one call to compound_head().