Fixed in r239382. On Mon, Jun 8, 2015 at 5:53 PM, David Majnemer <[email protected]> wrote:
> Thanks, I'll take a look tonight. > > > On Monday, June 8, 2015, Reid Kleckner <[email protected]> wrote: > >> This warns on C-style casts, which it should not: >> $ ninja check >> [68/414] Building CXX object >> lib\ExecutionEngine\RuntimeDyld\CMakeFiles\LLVMRuntimeDyld.dir\RTDyldMemoryManager.cpp.obj >> ..\lib\ExecutionEngine\RuntimeDyld\RTDyldMemoryManager.cpp(61,6) : >> warning: static_cast between pointer-to-function and pointer-to-object is >> a Microsoft extension [-Wmicrosoft] >> ((void (*)(void *))rf)(p); >> ^~~~~~~~~~~~~~~~~~~~ >> ..\lib\ExecutionEngine\RuntimeDyld\RTDyldMemoryManager.cpp(74,6) : >> warning: static_cast between pointer-to-function and pointer-to-object is >> a Microsoft extension [-Wmicrosoft] >> ((void (*)(void *))df)(p); >> ^~~~~~~~~~~~~~~~~~~~ >> 2 warnings generated. >> >> On Tue, Jun 2, 2015 at 3:15 PM, David Majnemer <[email protected]> >> wrote: >> >>> Author: majnemer >>> Date: Tue Jun 2 17:15:12 2015 >>> New Revision: 238877 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=238877&view=rev >>> Log: >>> [MSVC Compatibility] Permit static_cast from void-ptr to function-ptr >>> >>> The MSVC 2013 and 2015 implementation of std::atomic is specialized for >>> pointer types. The member functions are implemented using a static_cast >>> from void-ptr to function-ptr which is not allowed in the standard. >>> Permit this conversion if -fms-compatibility is present. >>> >>> This fixes PR23733. >>> >>> Modified: >>> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >>> cfe/trunk/lib/Sema/SemaCast.cpp >>> cfe/trunk/test/SemaCXX/MicrosoftCompatibility-cxx98.cpp >>> >>> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=238877&r1=238876&r2=238877&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) >>> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Tue Jun 2 >>> 17:15:12 2015 >>> @@ -5390,6 +5390,10 @@ def err_bad_const_cast_dest : Error< >>> "which is not a reference, pointer-to-object, or >>> pointer-to-data-member">; >>> def ext_cast_fn_obj : Extension< >>> "cast between pointer-to-function and pointer-to-object is an >>> extension">; >>> +def ext_ms_cast_fn_obj : ExtWarn< >>> + "static_cast between pointer-to-function and pointer-to-object is a " >>> + "Microsoft extension">, >>> + InGroup<Microsoft>; >>> def warn_cxx98_compat_cast_fn_obj : Warning< >>> "cast between pointer-to-function and pointer-to-object is >>> incompatible with C++98">, >>> InGroup<CXX98CompatPedantic>, DefaultIgnore; >>> >>> Modified: cfe/trunk/lib/Sema/SemaCast.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCast.cpp?rev=238877&r1=238876&r2=238877&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/lib/Sema/SemaCast.cpp (original) >>> +++ cfe/trunk/lib/Sema/SemaCast.cpp Tue Jun 2 17:15:12 2015 >>> @@ -1081,6 +1081,14 @@ static TryCastResult TryStaticCast(Sema >>> Kind = CK_BitCast; >>> return TC_Success; >>> } >>> + >>> + // Microsoft permits static_cast from 'pointer-to-void' to >>> + // 'pointer-to-function'. >>> + if (Self.getLangOpts().MSVCCompat && >>> DestPointee->isFunctionType()) { >>> + Self.Diag(OpRange.getBegin(), diag::ext_ms_cast_fn_obj) << >>> OpRange; >>> + Kind = CK_BitCast; >>> + return TC_Success; >>> + } >>> } >>> else if (DestType->isObjCObjectPointerType()) { >>> // allow both c-style cast and static_cast of objective-c >>> pointers as >>> >>> Modified: cfe/trunk/test/SemaCXX/MicrosoftCompatibility-cxx98.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/MicrosoftCompatibility-cxx98.cpp?rev=238877&r1=238876&r2=238877&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/test/SemaCXX/MicrosoftCompatibility-cxx98.cpp (original) >>> +++ cfe/trunk/test/SemaCXX/MicrosoftCompatibility-cxx98.cpp Tue Jun 2 >>> 17:15:12 2015 >>> @@ -6,3 +6,5 @@ enum ENUM; // expected-warning {{forward >>> ENUM *var = 0; >>> ENUM var2 = (ENUM)3; >>> enum ENUM1* var3 = 0;// expected-warning {{forward references to 'enum' >>> types are a Microsoft extension}} >>> + >>> +void (*PR23733)() = static_cast<void (*)()>((void *)0); // >>> expected-warning {{static_cast between pointer-to-function and >>> pointer-to-object is a Microsoft extension}} >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>> >> >>
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
