summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-01-23 15:29:33 +0000
committerDouglas Gregor <dgregor@apple.com>2012-01-23 15:29:33 +0000
commit84585ab48e5f7643ab56723ed76d3415b79a3692 (patch)
tree35236f543045802a3d94d62aff008c13a580a5bd /clang/lib
parentc7f9fd4da8be02b41ff2b44905bee9f1695a9be9 (diff)
downloadbcm5719-llvm-84585ab48e5f7643ab56723ed76d3415b79a3692.tar.gz
bcm5719-llvm-84585ab48e5f7643ab56723ed76d3415b79a3692.zip
Downgrade C++11 narrowing conversion errors to warnings default-mapped
to an error, so that users can turn them off if necessary. Note that this does *not* change the behavior of in a SFINAE context, where we still flag an error even if the warning is disabled. This matches GCC's behavior. llvm-svn: 148701
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaInit.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index f4f2663bc8b..355cf46464d 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -5817,9 +5817,11 @@ static void DiagnoseNarrowingInInitList(Sema &S, InitializationSequence &Seq,
// narrowing conversion even if the value is a constant and can be
// represented exactly as an integer.
S.Diag(PostInit->getLocStart(),
- S.getLangOptions().CPlusPlus0x && !S.getLangOptions().MicrosoftExt
- ? diag::err_init_list_type_narrowing
- : diag::warn_init_list_type_narrowing)
+ S.getLangOptions().MicrosoftExt || !S.getLangOptions().CPlusPlus0x?
+ diag::warn_init_list_type_narrowing
+ : S.isSFINAEContext()?
+ diag::err_init_list_type_narrowing_sfinae
+ : diag::err_init_list_type_narrowing)
<< PostInit->getSourceRange()
<< PreNarrowingType.getLocalUnqualifiedType()
<< EntityType.getLocalUnqualifiedType();
@@ -5828,9 +5830,11 @@ static void DiagnoseNarrowingInInitList(Sema &S, InitializationSequence &Seq,
case NK_Constant_Narrowing:
// A constant value was narrowed.
S.Diag(PostInit->getLocStart(),
- S.getLangOptions().CPlusPlus0x && !S.getLangOptions().MicrosoftExt
- ? diag::err_init_list_constant_narrowing
- : diag::warn_init_list_constant_narrowing)
+ S.getLangOptions().MicrosoftExt || !S.getLangOptions().CPlusPlus0x?
+ diag::warn_init_list_constant_narrowing
+ : S.isSFINAEContext()?
+ diag::err_init_list_constant_narrowing_sfinae
+ : diag::err_init_list_constant_narrowing)
<< PostInit->getSourceRange()
<< ConstantValue.getAsString(S.getASTContext(), EntityType)
<< EntityType.getLocalUnqualifiedType();
@@ -5839,9 +5843,11 @@ static void DiagnoseNarrowingInInitList(Sema &S, InitializationSequence &Seq,
case NK_Variable_Narrowing:
// A variable's value may have been narrowed.
S.Diag(PostInit->getLocStart(),
- S.getLangOptions().CPlusPlus0x && !S.getLangOptions().MicrosoftExt
- ? diag::err_init_list_variable_narrowing
- : diag::warn_init_list_variable_narrowing)
+ S.getLangOptions().MicrosoftExt || !S.getLangOptions().CPlusPlus0x?
+ diag::warn_init_list_variable_narrowing
+ : S.isSFINAEContext()?
+ diag::err_init_list_variable_narrowing_sfinae
+ : diag::err_init_list_variable_narrowing)
<< PostInit->getSourceRange()
<< PreNarrowingType.getLocalUnqualifiedType()
<< EntityType.getLocalUnqualifiedType();
OpenPOWER on IntegriCloud