There should be a way to poison a symbol only when it is used as a function or macro call. I suggest that following a symbol with a pair of parentheses might be a serviceable syntax for this. With this feature, the symbol rindex would still be usable for variables.
Subject: Re: New: #pragma GNU poison index() Try the attribute deprecated. Sent from my iPhone On Jul 22, 2008, at 23:50, "Dave at Yost dot com" <gcc-bugzilla@gcc.gnu.org > wrote: > There should be a way to poison a symbol only when it is used as a > function or > macro call. I suggest that following a symbol with a pair of > parentheses might > be a serviceable syntax for this. With this feature, the symbol > rindex would > still be usable for variables. > > > -- > Summary: #pragma GNU poison index() > Product: gcc > Version: unknown > Status: UNCONFIRMED > Severity: enhancement > Priority: P3 > Component: preprocessor > AssignedTo: unassigned at gcc dot gnu dot org > ReportedBy: Dave at Yost dot com > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36906 >
Let me expand on what I mean by the attribute deprecated. See http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Function-Attributes.html: deprecated The deprecated attribute results in a warning if the function is used anywhere in the source file. This is useful when identifying functions that are expected to be removed in a future version of a program. The warning also includes the location of the declaration of the deprecated function, to enable users to easily find further information about why the function is deprecated, or what they should do instead. Note that the warnings only occurs for uses: int old_fn () __attribute__ ((deprecated)); int old_fn (); int (*fn_ptr)() = old_fn; results in a warning on line 3 but not line 2. The deprecated attribute can also be used for variables and types (see Variable Attributes, see Type Attributes.)
One problem with this approach is that this code would not error: #include <string.h> char (*fnptr)() = rindex; I tend to agree with Andrew -- poisoning is too crude a tool for this use. Is there a reason you do not use deprecation here?
No answer in 3 months so closing.