Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22037

Should clang and gcc produce a diagnostic message when a program does pointer arithmetic on a function pointer?

$
0
0

This program compiles without errors, for example with clang -Wall -std=c11 a.c and gcc -Wall -std=c11 a.c. Is this a bug in clang and gcc? Because arithmetic is not defined on pointers to function types.

#include <stdio.h>void f(void) {}int main(void){    void (*p)(void) = f;    printf("%p\n", p);    printf("%p\n", p + 1);    return 0;}

There's a constraint on addition that either both operands have arithmetic type, or one is a pointer to a complete object type. I believe p is a pointer to a function type, not a a pointer to any sort of object type. Here's the C11 standard:

6.5.6 Additive operators

Constraints

  1. For addition, either both operands shall have arithmetic type, or one operand shall be a pointer to a complete object type and the other shall have integer type. (Incrementing is equivalent to adding 1.)

Conforming compilers are required to produce a diagnostic message if any translation unit violates a constraint. Again, the C11 standard:

5.1.1.3 Diagnostics

  1. A conforming implementation shall produce at least one diagnostic message (identified in an implementation-defined manner) if a preprocessing translation unit or translation unit contains a violation of any syntax rule or constraint, even if the behavior is also explicitly specified as undefined or implementation-defined. Diagnostic messages need not be produced in other circumstances.

Viewing all articles
Browse latest Browse all 22037

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>