https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113050

            Bug ID: 113050
           Summary: -Wincompatible-pointer-types emitted as a warning, not
                    an error, for __atomic_load
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sjames at gcc dot gnu.org
                CC: arsen at gcc dot gnu.org, fw at gcc dot gnu.org
  Target Milestone: ---

Noticed this when building udisks. I suspect this is actually a dupe of
PR69404, but I felt it was worth filing separately given it's interesting to
have it warn-but-not-error.

The expectation was that this would error (b/c of new 14 default), not just
warn:
```
$ gcc -c udisksenumtypes.i
udisksenumtypes.i: In function ‘udisks_get_type’:
udisksenumtypes.i:5:3: warning: argument 2 of ‘__atomic_load’ discards
‘volatile’ qualifier [-Wincompatible-pointer-types]
    5 |   __atomic_load(in, &out, 5);
      |   ^~~~~~~~~~~~~
```

It does the right thing with explicit -Werror=:
```
$ gcc -c udisksenumtypes.i -Werror=incompatible-pointer-types
udisksenumtypes.i: In function ‘udisks_get_type’:
udisksenumtypes.i:5:3: error: argument 2 of ‘__atomic_load’ discards ‘volatile’
qualifier [-Werror=incompatible-pointer-types]
    5 |   __atomic_load(in, &out, 5);
      |   ^~~~~~~~~~~~~
cc1: some warnings being treated as errors
```

udisksenumtypes.i:
```
volatile long out;
volatile long* in;

void udisks_get_type() {
  __atomic_load(in, &out, 5);
}
```

Reply via email to