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

            Bug ID: 93082
           Summary: macOS Authorization.h needs fixinclude
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mcccs at gmx dot com
  Target Milestone: ---

This bug has existed for at least two years.

In Authorization.h:

```
static const size_t kAuthorizationExternalFormLength = 32;

typedef struct {
    char bytes[kAuthorizationExternalFormLength];
} AuthorizationExternalForm;
```

GCC prints this error:

/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Security.framework/Headers/Authorization.h:193:7:
error: variably modified 'bytes' at file scope

(from gcc/c/c-decl.c Line 5792)

Clang (-Wall -Wextra): *Compiles without warning*

Clang (-Wall -Wextra -pedantic): warning: variable length array folded to
constant array as an extension [-Wgnu-folding-constant]

----

Impact: Golang's official compiler allows linking between C and Go. When I try
to build a Go package that imports "crypto/x509" (usually indirectly), part of
Go standard library on macOS, and `export CC=gcc-9` is set, Go returns the
following error:

# crypto/x509
In file included from
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Security.framework/Headers/AuthSession.h:32,
                 from
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Security.framework/Headers/Security.h:42,
                 from
/usr/local/Cellar/go/1.13.5/libexec/src/crypto/x509/root_cgo_darwin.go:17:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Security.framework/Headers/Authorization.h:193:7:
error: variably modified 'bytes' at file scope
  193 |  char bytes[kAuthorizationExternalFormLength];
      |       ^~~~~

Other than a fixinclude, there are other ways:

- Every time after an upgrade, open Authorization.h with sudo vim and replace
kAuthorizationExternalFormLength with 32
- Remove `export CC=gcc-9`
- Disable C-Go interlink (on by default)

A fixincludes entry would be quite clean:

fix = {
    hackname  = darwin_authorization;
    mach      = "*-*-darwin*";
    files     = Frameworks/Security.framework/Headers/Authorization.h;
    select    =
    "char bytes[kAuthorizationExternalFormLength];\n";
    c_fix     = format;
    c_fix_arg =
    "char bytes[32];\n";
    test_text =
    "char bytes[kAuthorizationExternalFormLength];\n";
};

However, I can't test it due to PR90835.

Reply via email to