dead-stores.c revision 3f64a0e3be2c9408f8256bd3aa9f0ce9e268982c
1ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek// RUN: %clang_cc1 -Wunused-variable -analyze -analyzer-experimental-internal-checks -analyzer-check-dead-stores -fblocks -verify -Wno-unreachable-code -analyzer-opt-analyze-nested-blocks %s
2ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek// RUN: %clang_cc1 -Wunused-variable -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=basic -analyzer-constraints=basic -analyzer-check-dead-stores -fblocks -verify -Wno-unreachable-code -analyzer-opt-analyze-nested-blocks %s
3ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek// RUN: %clang_cc1 -Wunused-variable -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=basic -analyzer-constraints=range -analyzer-check-dead-stores -fblocks -verify -Wno-unreachable-code -analyzer-opt-analyze-nested-blocks %s
4ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek// RUN: %clang_cc1 -Wunused-variable -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-constraints=basic -analyzer-check-dead-stores -fblocks -verify -Wno-unreachable-code -analyzer-opt-analyze-nested-blocks %s
5ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek// RUN: %clang_cc1 -Wunused-variable -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-constraints=range -analyzer-check-dead-stores -fblocks -verify -Wno-unreachable-code -analyzer-opt-analyze-nested-blocks %s
68aefcbfd3c0409c26ca44c123a41edd631eab9bcTed Kremenek
749a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f1() {
8ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  int k, y; // expected-warning{{unused variable 'k'}} expected-warning{{unused variable 'y'}}
90fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek  int abc=1;
10ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  long idx=abc+3*5; // expected-warning {{never read}} expected-warning{{unused variable 'idx'}}
11aa395ba050c558b1ebf66c7868165938d98b6a5bTed Kremenek}
128aefcbfd3c0409c26ca44c123a41edd631eab9bcTed Kremenek
1349a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f2(void *b) {
148aefcbfd3c0409c26ca44c123a41edd631eab9bcTed Kremenek char *c = (char*)b; // no-warning
15ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek char *d = b+1; // expected-warning {{never read}} expected-warning{{unused variable 'd'}}
16a316e7b735b12ce6b34961a9dcfaae34f4b08d29Douglas Gregor printf("%s", c); // expected-warning{{implicitly declaring C library function 'printf' with type 'int (char const *, ...)'}} \
17a316e7b735b12ce6b34961a9dcfaae34f4b08d29Douglas Gregor // expected-note{{please include the header <stdio.h> or explicitly provide a declaration for 'printf'}}
188aefcbfd3c0409c26ca44c123a41edd631eab9bcTed Kremenek}
1974c43a0967d07572dd6907776d91cdb2b2e7179aTed Kremenek
20e030358cc06e1cbce3c2e00ca67c946f9164b2a8Chris Lattnerint f();
21e030358cc06e1cbce3c2e00ca67c946f9164b2a8Chris Lattner
2249a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f3() {
230fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek  int r;
240fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek  if ((r = f()) != 0) { // no-warning
250fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek    int y = r; // no-warning
260fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek    printf("the error is: %d\n", y);
270fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek  }
2874c43a0967d07572dd6907776d91cdb2b2e7179aTed Kremenek}
2949a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek
3049a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f4(int k) {
3149a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek
3249a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek  k = 1;
3349a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek
3449a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek  if (k)
3549a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek    f1();
3649a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek
371a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek  k = 2;  // expected-warning {{never read}}
3849a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek}
3993fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek
40f87821c086a46411883b385c743996a35cc8e154Ted Kremenekvoid f5() {
41f87821c086a46411883b385c743996a35cc8e154Ted Kremenek
42f87821c086a46411883b385c743996a35cc8e154Ted Kremenek  int x = 4; // no-warning
43ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  int *p = &x; // expected-warning{{never read}} expected-warning{{unused variable 'p'}}
44f87821c086a46411883b385c743996a35cc8e154Ted Kremenek
45a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek}
46a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek
47a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenekint f6() {
48a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek
49a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek  int x = 4;
501a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek  ++x; // expected-warning{{never read}}
51a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek  return 1;
52a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek}
531a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek
541a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenekint f7(int *p) {
551a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek  // This is allowed for defensive programming.
561a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek  p = 0; // no-warning
571a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek  return 1;
581a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek}
591a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek
6093fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenekint f7b(int *p) {
6193fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  // This is allowed for defensive programming.
6293fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  p = (0); // no-warning
6393fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  return 1;
6493fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek}
6593fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek
6693fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenekint f7c(int *p) {
6793fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  // This is allowed for defensive programming.
6893fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  p = (void*) 0; // no-warning
6993fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  return 1;
7093fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek}
7193fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek
7293fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenekint f7d(int *p) {
7393fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  // This is allowed for defensive programming.
7493fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  p = (void*) (0); // no-warning
7593fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek  return 1;
7693fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek}
7793fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek
781a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenekint f8(int *p) {
794489fe10fa073eb326e2c8906db170f009050911Daniel Dunbar  extern int *baz();
80f66d5cd8926541099def3cb187d56eff60d3be99John McCall  if ((p = baz())) // expected-warning{{Although the value}}
811a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek    return 1;
821a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek  return 0;
831a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek}
841a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek
852cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenekint f9() {
862cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek  int x = 4;
872cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek  x = x + 10; // expected-warning{{never read}}
882cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek  return 1;
892cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek}
902cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek
912cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenekint f10() {
922cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek  int x = 4;
932cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek  x = 10 + x; // expected-warning{{never read}}
942cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek  return 1;
952cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek}
962cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek
978b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenekint f11() {
988b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenek  int x = 4;
99380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek  return x++; // expected-warning{{never read}}
1008b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenek}
1018b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenek
102380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenekint f11b() {
103380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek  int x = 4;
1047f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek  return ((((++x)))); // no-warning
105380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek}
106380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek
107fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenekint f12a(int y) {
108ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  int x = y;  // expected-warning{{unused variable 'x'}}
109fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek  return 1;
110fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek}
111fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenekint f12b(int y) {
112fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek  int x __attribute__((unused)) = y;  // no-warning
113fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek  return 1;
114fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek}
115ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenekint f12c(int y) {
116ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  // Allow initialiation of scalar variables by parameters as a form of
117ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  // defensive programming.
118ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  int x = y;  // no-warning
119ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  x = 1;
120ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  return x;
121ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek}
1222cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek
123efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek// Filed with PR 2630.  This code should produce no warnings.
124efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenekint f13(void)
125efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek{
126efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek  int a = 1;
127efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek  int b, c = b = a + a;
128efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek
129efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek  if (b > 0)
130efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek    return (0);
131efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek
132efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek  return (a + b + c);
133efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek}
134efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek
135b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek// Filed with PR 2763.
13684fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenekint f14(int count) {
137b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek  int index, nextLineIndex;
138b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek  for (index = 0; index < count; index = nextLineIndex+1) {
139b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek    nextLineIndex = index+1;  // no-warning
140b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek    continue;
141b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek  }
142b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek  return index;
143b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek}
14484fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek
14584fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek// Test case for <rdar://problem/6248086>
14684fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenekvoid f15(unsigned x, unsigned y) {
14784fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek  int count = x * y;   // no-warning
148ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  int z[count]; // expected-warning{{unused variable 'z'}}
14984fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek}
15084fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek
151610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenekint f16(int x) {
152610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek  x = x * 2;
153d2025e26738c3017af6685e342a3a746cdf8249fTed Kremenek  x = sizeof(int [x = (x || x + 1) * 2]) // expected-warning{{Although the value stored to 'x' is used}}
154d2025e26738c3017af6685e342a3a746cdf8249fTed Kremenek      ? 5 : 8;
155610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek  return x;
156610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek}
157610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek
1583b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek// Self-assignments should not be flagged as dead stores.
159a5495eadc816b29954e22df55aa9a9d6bb41429cMike Stumpvoid f17() {
1603b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek  int x = 1;
1613b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek  x = x; // no-warning
1623b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek}
1637f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek
1647f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek// <rdar://problem/6506065>
1657f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek// The values of dead stores are only "consumed" in an enclosing expression
166cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump// what that value is actually used.  In other words, don't say "Although the
167cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump// value stored to 'x' is used...".
1687f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenekint f18() {
1697f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek   int x = 0; // no-warning
1707f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek   if (1)
1717f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek      x = 10;  // expected-warning{{Value stored to 'x' is never read}}
1727f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek   while (1)
1737f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek      x = 10;  // expected-warning{{Value stored to 'x' is never read}}
1747f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek   do
1757f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek      x = 10;   // expected-warning{{Value stored to 'x' is never read}}
1767f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek   while (1);
1777f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek
1787f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek   return (x = 10); // expected-warning{{Although the value stored to 'x' is used in the enclosing expression, the value is never actually read from 'x'}}
1797f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek}
180d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek
181d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek// PR 3514: false positive `dead initialization` warning for init to global
182d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek//  http://llvm.org/bugs/show_bug.cgi?id=3514
183d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenekextern const int MyConstant;
184d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenekint f19(void) {
185d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek  int x = MyConstant;  // no-warning
186d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek  x = 1;
187d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek  return x;
188d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek}
189d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek
19028433ff063fe5ba5eac486d4bfcfa9e210097772Ted Kremenekint f19b(void) { // This case is the same as f19.
191d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek  const int MyConstant = 0;
19228433ff063fe5ba5eac486d4bfcfa9e210097772Ted Kremenek  int x = MyConstant; // no-warning
193d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek  x = 1;
194d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek  return x;
195d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek}
196632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek
197632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenekvoid f20(void) {
198632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek  int x = 1; // no-warning
199632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek#pragma unused(x)
200632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek}
201632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek
202cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stumpvoid halt() __attribute__((noreturn));
203cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stumpint f21() {
204cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump  int x = 4;
205cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump
206cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump  ++x; // expected-warning{{never read}}
207cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump  if (1) {
208cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump    halt();
209cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump    (void)x;
210cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump  }
211cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump  return 1;
212cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump}
213e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump
214e5af3ce53ec58995b09381ba645ab2117a46647bMike Stumpint j;
215e5af3ce53ec58995b09381ba645ab2117a46647bMike Stumpvoid f22() {
216e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int x = 4;
217e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y1 = 4;
218e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y2 = 4;
219e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y3 = 4;
220e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y4 = 4;
221e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y5 = 4;
222e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y6 = 4;
223e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y7 = 4;
224e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y8 = 4;
225e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y9 = 4;
226e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  int y10 = 4;
2275f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump  int y11 = 4;
2285f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump  int y12 = 4;
229fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump  int y13 = 4;
230fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump  int y14 = 4;
231fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump  int y15 = 4;
2328f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  int y16 = 4;
2338f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  int y17 = 4;
2348f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  int y18 = 4;
23522cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump  int y19 = 4;
23622cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump  int y20 = 4;
237e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump
238e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++x; // expected-warning{{never read}}
239e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y1;
240e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y2;
241e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y3;
242e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y4;
243e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y5;
244e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y6;
245e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y7;
246e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y8;
247e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y9;
248e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  ++y10;
2495f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump  ++y11;
2505f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump  ++y12;
251fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump  ++y13;
252fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump  ++y14;
253fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump  ++y15;
2548f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  ++y16;
2558f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  ++y17;
2568f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  ++y18;
25722cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump  ++y19;
25822cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump  ++y20;
259e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump
260e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  switch (j) {
261e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 1:
262e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    if (0)
263e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      (void)x;
264e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    if (1) {
265e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      (void)y1;
266e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      return;
267e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    }
268e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
269e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    break;
270e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 2:
271e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    if (0)
272e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      (void)x;
273e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    else {
274e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      (void)y2;
275e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      return;
276e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    }
277e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
278e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    break;
279e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 3:
280e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    if (1) {
281e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      (void)y3;
282e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      return;
283e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    } else
284e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump      (void)x;
285e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
286e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  break;
287e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 4:
288e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    0 ? : ((void)y4, ({ return; }));
289e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
290e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    break;
291e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 5:
292e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    1 ? : (void)x;
293e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    0 ? (void)x : ((void)y5, ({ return; }));
294e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
295e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    break;
296e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 6:
297e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    1 ? ((void)y6, ({ return; })) : (void)x;
298e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
299e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    break;
300e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 7:
301e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)(0 && x);
302e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)y7;
303e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)(0 || (y8, ({ return; }), 1));
304e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
305e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    break;
306e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 8:
307e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)(1 && (y9, ({ return; }), 1));
308e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)x;
309e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    break;
310e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  case 9:
311e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)(1 || x);
312e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump    (void)y10;
3135f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump    break;
3145f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump  case 10:
3158f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    while (0) {
3168f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump      (void)x;
3175f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump    }
3188f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    (void)y11;
3195f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump    break;
3205f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump  case 11:
3218f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    while (1) {
3228f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump      (void)y12;
3235f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump    }
3248f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    (void)x;
3255f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump    break;
326fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump  case 12:
3278f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    do {
328fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump      (void)y13;
3298f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    } while (0);
3308f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    (void)y14;
3318f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    break;
3328f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  case 13:
3338f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    do {
3348f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump      (void)y15;
3358f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    } while (1);
3368f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    (void)x;
3378f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    break;
3388f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  case 14:
3398f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    for (;;) {
3408f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump      (void)y16;
341fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    }
342fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    (void)x;
343fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    break;
3448f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  case 15:
345fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    for (;1;) {
3468f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump      (void)y17;
347fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    }
348fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    (void)x;
349fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    break;
3508f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump  case 16:
351fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    for (;0;) {
352fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump      (void)x;
353fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    }
3548f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump    (void)y18;
355fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump    break;
35622cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump  case 17:
35722cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump    __builtin_choose_expr(0, (void)x, ((void)y19, ({ return; })));
35822cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump    (void)x;
35922cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump    break;
36022cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump  case 19:
36122cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump    __builtin_choose_expr(1, ((void)y20, ({ return; })), (void)x);
36222cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump    (void)x;
36322cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump    break;
364e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump  }
365e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump}
3663a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek
3673a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenekvoid f23_aux(const char* s);
3683a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenekvoid f23(int argc, char **argv) {
3693a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek  int shouldLog = (argc > 1); // no-warning
3703a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek  ^{
3713a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek     if (shouldLog) f23_aux("I did too use it!\n");
3723a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek     else f23_aux("I shouldn't log.  Wait.. d'oh!\n");
3733a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek  }();
3743a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek}
3753a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek
3763a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenekvoid f23_pos(int argc, char **argv) {
377ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek  int shouldLog = (argc > 1); // expected-warning{{Value stored to 'shouldLog' during its initialization is never read}} expected-warning{{unused variable 'shouldLog'}}
3783a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek  ^{
3793a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek     f23_aux("I did too use it!\n");
3803a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek  }();
3813a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek}
3829a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek
3839a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekvoid f24_A(int y) {
3849a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  // FIXME: One day this should be reported as dead since 'z = x + y' is dead.
3859a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  int x = (y > 2); // no-warning
3869a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  ^ {
387ebd42f40803396d63bc59b77285d088cca61f53fTed Kremenek      int z = x + y; // expected-warning{{Value stored to 'z' during its initialization is never read}} expected-warning{{unused variable 'z'}}
3889a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  }();
3899a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek}
3909a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek
3919a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekvoid f24_B(int y) {
3929a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  // FIXME: One day this should be reported as dead since 'x' is just overwritten.
3939a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  __block int x = (y > 2); // no-warning
3949a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  ^{
3959a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek    // FIXME: This should eventually be a dead store since it is never read either.
3969a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek    x = 5; // no-warning
3979a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  }();
3989a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek}
3999a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek
4009a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekint f24_C(int y) {
4019a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  // FIXME: One day this should be reported as dead since 'x' is just overwritten.
4029a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  __block int x = (y > 2); // no-warning
4039a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  ^{
4049a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek    x = 5; // no-warning
4059a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  }();
4069a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  return x;
4079a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek}
4089a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek
4099a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekint f24_D(int y) {
4109a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  __block int x = (y > 2); // no-warning
4119a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  ^{
4129a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek    if (y > 4)
4139a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek      x = 5; // no-warning
4149a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  }();
4159a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek  return x;
4169a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek}
4179a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek
41874635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek// This example shows that writing to a variable captured by a block means that it might
41974635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek// not be dead.
42074635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenekint f25(int y) {
42174635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  __block int x = (y > 2);
42274635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  __block int z = 0;
42374635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  void (^foo)() = ^{ z = x + y; };
42474635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  x = 4; // no-warning
42574635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  foo();
42674635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  return z;
42774635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek}
42874635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek
42974635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek// This test is mostly the same as 'f25', but shows that the heuristic of pruning out dead
43074635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek// stores for variables that are just marked '__block' is overly conservative.
43174635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenekint f25_b(int y) {
43274635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  // FIXME: we should eventually report a dead store here.
43374635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  __block int x = (y > 2);
43474635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  __block int z = 0;
43574635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  x = 4; // no-warning
43674635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek  return z;
43774635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek}
43874635d8cd3c367890735dc4af2c2825a7e4b434cTed Kremenek
4392cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenekint f26_nestedblocks() {
4402cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek  int z;
4412cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek  z = 1;
4422cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek  __block int y = 0;
4432cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek  ^{
4442cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek    int k;
4452cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek    k = 1; // expected-warning{{Value stored to 'k' is never read}}
4462cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek    ^{
4472cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek        y = z + 1;
4482cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek     }();
4492cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek  }();
4502cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek  return y;
4512cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek}
4522cfe28b6a061e72c6c8726d7ecb879093a1ab7a3Ted Kremenek
4533f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek// The FOREACH macro in QT uses 'break' statements within statement expressions
4543f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek// placed within the increment code of for loops.
4553f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenekvoid rdar8014335() {
4563f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek  for (int i = 0 ; i != 10 ; ({ break; })) {
4573f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek    for ( ; ; ({ ++i; break; })) ;
4583f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek    // Note that the next value stored to 'i' is never executed
4593f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek    // because the next statement to be executed is the 'break'
4603f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek    // in the increment code of the first loop.
4613f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek    i = i * 3; // expected-warning{{Value stored to 'i' is never read}}
4623f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek  }
4633f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek}
4643f64a0e3be2c9408f8256bd3aa9f0ce9e268982cTed Kremenek
465