diff options
author | Francois Pichet <pichet2000@gmail.com> | 2011-09-18 21:37:37 +0000 |
---|---|---|
committer | Francois Pichet <pichet2000@gmail.com> | 2011-09-18 21:37:37 +0000 |
commit | 08d2fa0a782163cba3078b3a873b477a9ecbb3f8 (patch) | |
tree | 7dba70e594ab6992b906d0be14b24c1638262eb3 /clang/lib/Sema/SemaOverload.cpp | |
parent | 0a0f599f2c9a89d2f60b6b16c2845a819b241214 (diff) | |
download | bcm5719-llvm-08d2fa0a782163cba3078b3a873b477a9ecbb3f8.tar.gz bcm5719-llvm-08d2fa0a782163cba3078b3a873b477a9ecbb3f8.zip |
In Microsoft mode(-fms-compatibility), prefer an integral conversion to a floating-to-integral conversion if the integral conversion is between types of the same size.
For example:
void f(float);
void f(int);
int main {
long a;
f(a);
}
Here, MSVC will call f(int) instead of generating a compile error as clang will do in standard mode.
This fixes a few errors when parsing MFC code with clang.
llvm-svn: 140007
Diffstat (limited to 'clang/lib/Sema/SemaOverload.cpp')
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index a2ef403618f..c084f76a50b 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -2866,6 +2866,25 @@ CompareStandardConversionSequences(Sema &S, } } + // In Microsoft mode, prefer an integral conversion to a + // floating-to-integral conversion if the integral conversion + // is between types of the same size. + // For example: + // void f(float); + // void f(int); + // int main { + // long a; + // f(a); + // } + // Here, MSVC will call f(int) instead of generating a compile error + // as clang will do in standard mode. + if (S.getLangOptions().MicrosoftMode && + SCS1.Second == ICK_Integral_Conversion && + SCS2.Second == ICK_Floating_Integral && + S.Context.getTypeSize(SCS1.getFromType()) == + S.Context.getTypeSize(SCS1.getToType(2))) + return ImplicitConversionSequence::Better; + return ImplicitConversionSequence::Indistinguishable; } |