llvm/llvm-project

c11: Accepts ill-formed program with inline function definition containing modifiable variable with static storage duration.

Open

#39 524 ouverte le 28 déc. 2018

Voir sur GitHub
 (4 commentaires) (0 réactions) (1 assigné)C++ (10 782 forks)batch import
bugzillacclang:diagnosticsconfirmedgood first issue

Métriques du dépôt

Stars
 (26 378 stars)
Métriques de merge PR
 (Merge moyen 1j 2h) (1 000 PRs mergées en 30 j)

Description

Bugzilla Link 40177
Version trunk
OS All
CC @hfinkel,@zygoloid

Extended Description

Test case (prog.c):

inline void f() { static int x; }

int main() { }

Compilation command line:

clang prog.c -Wall -Wextra -std=c11 -pedantic-errors

Observed behaviour:

No error message outputed. Only a warning message outputed.

Expected behaviour:

An error message outputed.

The program violates 6.7.4/3:

"An inline definition of a function with external linkage shall not contain
 a definition of a modifiable object with static or thread storage duration,
 and shall not contain a reference to an identifier with internal linkage."

Since -pedantic-errors is used we should get an error instead of a warning.

Note:

GCC gives the expected error message.

Guide contributeur