From: Greg C. <chi...@co...> - 2006-04-04 00:38:16
|
This report seems similar to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12477 yet I'm also reporting a gcc-3.4.5 regression. 12477 is the only report I find with keywords 'inline dllimport'. * To reproduce: C:/tmp[0]$cat inline_dllimport.cpp inline int __declspec(dllimport) foo(int i) { return i+i; } C:/tmp[0]$/MinGW-20050120/bin/g++ -dumpversion 3.4.2 C:/tmp[0]$/MinGW-20050120/bin/g++ -c inline_dllimport.cpp C:/tmp[0]$/MinGW-20050827/bin/g++ -dumpversion 3.4.4 C:/tmp[0]$/MinGW-20050827/bin/g++ -c inline_dllimport.cpp C:/tmp[0]$/MinGW-20060119/bin/g++ -dumpversion 3.4.5 C:/tmp[0]$/MinGW-20060119/bin/g++ -c inline_dllimport.cpp inline_dllimport.cpp:2: warning: inline function `int foo(int)' \ declared as dllimport: attribute ignored Only 3.4.5 complains. I can make 3.4.2 complain by adding '-W': C:/tmp[0]$/MinGW-20050120/bin/g++ -c -W inline_dllimport.cpp inline_dllimport.cpp:2: warning: inline function 'int foo(int)' \ is declared as dllimport: attribute ignored. But 3.4.5 complains with no explicit options. * Why this warning seems very aggressive, with or without '-W' Here is a real-world case from wxWidgets: wxWidgets/include/wx/dnd.h 48 inline WXDLLEXPORT bool wxIsDragResultOk(wxDragResult res) 49 { 50 return res == wxDragCopy || res == wxDragMove || res == wxDragLink; 51 } I asked one of the wx developers to consider removing their dll[im|ex]port macro. He replied that we can't know for sure whether the compiler actually inlines that function, and, if it doesn't, then we really do need dllimport to use it. Is there any way to write that function correctly without getting this diagnostic? (Please don't say '-w'.) * Guidance requested Is this sufficiently distinct from 12477 to warrant a separate report? Or is it worth adding a comment to 12477 indicating that 3.4.5 gives this warning by default? Or is it vain to report it, and should I just wait and hope that something like '-Wno-attributes' lets me turn off the warning? The 4.1.0 manual says "This will not stop errors for incorrect use of supported attributes", though I think a case can be made that the testcase usage is not incorrect. |