Note: This bug is displayed in read-only format because
the product is no longer active in Red Hat Bugzilla.
RHEL Engineering is moving the tracking of its product development work on RHEL 6 through RHEL 9 to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "RHEL project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs in the statuses "NEW", "ASSIGNED", and "POST" are being migrated throughout September 2023. Bugs of Red Hat partners with an assigned Engineering Partner Manager (EPM) are migrated in late September as per pre-agreed dates. Bugs against components "kernel", "kernel-rt", and "kpatch" are only migrated if still in "NEW" or "ASSIGNED". If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "RHEL project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/RHEL-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Cause:
net-snmp-config.h contains preprocessor macros with hyphen characters ('-') in their name. However, '-' is not allowed in a macro name.
Consequence:
C compiler shows extra 'warning: extra tokens at end of #ifdef directive', when compiling anything, that includes net-snmp-config.h
Fix:
Rename the macros to use underscores instead hyphens.
Result:
No compiler warnings.
Description of problem:
Net-SNMP libraries and headers are invalid due to hyphens.
Version-Release number of selected component (if applicable):
gcc-4.4.7-4.el6.x86_64
libgcc-4.4.7-4.el6.x86_64
libgcc-4.4.7-4.el6.i686
How reproducible:
1. # vi test.c
#ifdef net-snmp-config_multilib_redirection_h
#endif
int main()
{
return 0;
}
2. # gcc -o test test.c
test.c:1:11: warning: extra tokens at end of #ifdef directive
Actual results:
The C program compiles but warns of: test.c:1:11: warning: extra tokens at end of #ifdef directive.
Remove the hyphens from the #ifdef and #define directives and the problem is fixed.
Expected results:
Absence of the extra token message.
Additional info:
Non-conformance of standards. C11 and C99 have a section under 6.4.2.1 that describes what is considered valid syntax for an identifier, which includes pre-processor macro identifiers.
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf is the standard document for C99 which provides a reference.
Upon consideration of what is considered a valid identifier per C99, "net-snmp-config_multilib_redirection_h" is not a valid identifier because it contains a hyphen. The hyphen is not in the list of characters that are acceptable in an identifier.
Sure, hyphen is not valid identifier, the above is handled essentially as
#ifdef net
with extra tokens after it for which it warns. Various sources contain extra tokens after e.g. #ifdef, or #else, #endif etc.
If you want the compiler to error on this, just use -pedantic-errors, then you'll get a hard error instead of warning.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.
https://rhn.redhat.com/errata/RHSA-2015-1385.html
Description of problem: Net-SNMP libraries and headers are invalid due to hyphens. Version-Release number of selected component (if applicable): gcc-4.4.7-4.el6.x86_64 libgcc-4.4.7-4.el6.x86_64 libgcc-4.4.7-4.el6.i686 How reproducible: 1. # vi test.c #ifdef net-snmp-config_multilib_redirection_h #endif int main() { return 0; } 2. # gcc -o test test.c test.c:1:11: warning: extra tokens at end of #ifdef directive Actual results: The C program compiles but warns of: test.c:1:11: warning: extra tokens at end of #ifdef directive. Remove the hyphens from the #ifdef and #define directives and the problem is fixed. Expected results: Absence of the extra token message. Additional info: Non-conformance of standards. C11 and C99 have a section under 6.4.2.1 that describes what is considered valid syntax for an identifier, which includes pre-processor macro identifiers. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf is the standard document for C99 which provides a reference. Upon consideration of what is considered a valid identifier per C99, "net-snmp-config_multilib_redirection_h" is not a valid identifier because it contains a hyphen. The hyphen is not in the list of characters that are acceptable in an identifier.