• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -fsyntax-only -Wc++11-compat -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
2 
3 // Verify that the appropriate fixits are emitted for narrowing conversions in
4 // initializer lists.
5 
6 typedef short int16_t;
7 
fixits()8 void fixits() {
9   int x = 999;
10   struct {char c;} c2 = {x};
11   // CHECK: warning:{{.*}} cannot be narrowed
12   // CHECK: fix-it:{{.*}}:26}:"static_cast<char>("
13   // CHECK: fix-it:{{.*}}:27}:")"
14   struct {int16_t i;} i16 = {70000};
15   // CHECK: warning:{{.*}} cannot be narrowed
16   // CHECK: fix-it:{{.*}}:30}:"static_cast<int16_t>("
17   // CHECK: fix-it:{{.*}}:35}:")"
18 }
19 
20 template<typename T>
maybe_shrink_int(T t)21 void maybe_shrink_int(T t) {
22   struct {T t;} t2 = {700};
23 }
24 
test_template()25 void test_template() {
26   maybe_shrink_int((char)3);
27   // CHECK: warning:{{.*}} cannot be narrowed
28   // CHECK: note:{{.*}} in instantiation
29   // CHECK: note:{{.*}} silence
30   // FIXME: This should be static_cast<T>.
31   // CHECK: fix-it:{{.*}}"static_cast<char>("
32   // CHECK: fix-it:{{.*}}")"
33 }
34