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

            Bug ID: 88568
           Summary: GCC cannot dllimport variables with undefined types
           Product: gcc
           Version: 8.1.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: m101010a at gmail dot com
                CC: bangerth at apex68 dot ticam.utexas.edu,
                    gcc-bugs at gcc dot gnu.org, loewis at gcc dot gnu.org,
                    martin at loewis dot home.cs.tu-berlin.de, neil at gcc dot 
gnu.org,
                    unassigned at gcc dot gnu.org
  Target Milestone: ---

$ cat x.c
__attribute__((dllimport)) struct s var;
$ gcc -x c -fsyntax-only x.c
x.c:1:37: error: storage size of 'var' isn't known
 __attribute__((dllimport)) struct s var;
                                     ^~~
$ gcc -x c++ -fsyntax-only x.c
$ gcc -v
Using built-in specs.
COLLECT_GCC=C:\Program Files
(x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin\gcc.exe
COLLECT_LTO_WRAPPER=C:/Program\ Files\
(x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/../libexec/gcc/i686
-w64-mingw32/8.1.0/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=i686-w64-mingw32
--build=i686-w64-mingw32 --target=i686-w64-min
gw32 --prefix=/mingw32
--with-sysroot=/c/mingw810/i686-810-posix-dwarf-rt_v6-rev0/mingw32
--enable-shared --enable-stati
c --disable-multilib --enable-languages=c,c++,fortran,lto
--enable-libstdcxx-time=yes --enable-threads=posix --enable-li
bgomp --enable-libatomic --enable-lto --enable-graphite
--enable-checking=release --enable-fully-dynamic-string --enable
-version-specific-runtime-libs --disable-sjlj-exceptions --with-dwarf2
--disable-libstdcxx-pch --disable-libstdcxx-debug
 --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls
--disable-werror --disable-symvers --with-gnu
-as --with-gnu-ld --with-arch=i686 --with-tune=generic --with-libiconv
--with-system-zlib --with-gmp=/c/mingw810/prerequ
isites/i686-w64-mingw32-static
--with-mpfr=/c/mingw810/prerequisites/i686-w64-mingw32-static
--with-mpc=/c/mingw810/prer
equisites/i686-w64-mingw32-static
--with-isl=/c/mingw810/prerequisites/i686-w64-mingw32-static
--with-pkgversion='i686-p
osix-dwarf-rev0, Built by MinGW-W64 project'
--with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe
-fno-ident -I/c/mingw810/i686-810-posix-dwarf-rt_v6-rev0/mingw32/opt/include
-I/c/mingw810/prerequisites/i686-zlib-stati
c/include -I/c/mingw810/prerequisites/i686-w64-mingw32-static/include'
CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/i686
-810-posix-dwarf-rt_v6-rev0/mingw32/opt/include
-I/c/mingw810/prerequisites/i686-zlib-static/include -I/c/mingw810/prere
quisites/i686-w64-mingw32-static/include' CPPFLAGS='
-I/c/mingw810/i686-810-posix-dwarf-rt_v6-rev0/mingw32/opt/include -
I/c/mingw810/prerequisites/i686-zlib-static/include
-I/c/mingw810/prerequisites/i686-w64-mingw32-static/include' LDFLAGS
='-pipe -fno-ident
-L/c/mingw810/i686-810-posix-dwarf-rt_v6-rev0/mingw32/opt/lib
-L/c/mingw810/prerequisites/i686-zlib-s
tatic/lib -L/c/mingw810/prerequisites/i686-w64-mingw32-static/lib
-Wl,--large-address-aware'
Thread model: posix
gcc version 8.1.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project)

Since this works in C++, I would expect it to work in C as well.  This works in
Clang 7, and if the dllimport attribute is removed fails for both C and C++ in
both Clang and GCC.  If struct s is given a definition, it compiles fine.

Reply via email to