dead-stores.c revision 9a0459c0f59a09ac7287ca1f49083fc6b31e4142
13a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek// RUN: clang-cc -analyze -analyzer-experimental-internal-checks -warn-dead-stores -fblocks -verify %s 23a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek// RUN: clang-cc -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=basic -analyzer-constraints=basic -warn-dead-stores -fblocks -verify %s 33a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek// RUN: clang-cc -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=basic -analyzer-constraints=range -warn-dead-stores -fblocks -verify %s 43a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek// RUN: clang-cc -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -analyzer-constraints=basic -warn-dead-stores -fblocks -verify %s 53a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek// RUN: clang-cc -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -analyzer-constraints=range -warn-dead-stores -fblocks -verify %s 68aefcbfd3c0409c26ca44c123a41edd631eab9bcTed Kremenek 749a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f1() { 8aa395ba050c558b1ebf66c7868165938d98b6a5bTed Kremenek int k, y; 90fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek int abc=1; 101a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek long idx=abc+3*5; // expected-warning {{never read}} 11aa395ba050c558b1ebf66c7868165938d98b6a5bTed Kremenek} 128aefcbfd3c0409c26ca44c123a41edd631eab9bcTed Kremenek 1349a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f2(void *b) { 148aefcbfd3c0409c26ca44c123a41edd631eab9bcTed Kremenek char *c = (char*)b; // no-warning 151a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek char *d = b+1; // expected-warning {{never read}} 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 2049a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f3() { 210fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek int r; 220fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek if ((r = f()) != 0) { // no-warning 230fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek int y = r; // no-warning 240fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek printf("the error is: %d\n", y); 250fdf06e5eef80ce56ce6499ba662453919b95af1Ted Kremenek } 2674c43a0967d07572dd6907776d91cdb2b2e7179aTed Kremenek} 2749a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek 2849a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenekvoid f4(int k) { 2949a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek 3049a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek k = 1; 3149a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek 3249a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek if (k) 3349a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek f1(); 3449a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek 351a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek k = 2; // expected-warning {{never read}} 3649a2fd2758996b6f674babf19c75b3d01e77e2d4Ted Kremenek} 3793fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek 38f87821c086a46411883b385c743996a35cc8e154Ted Kremenekvoid f5() { 39f87821c086a46411883b385c743996a35cc8e154Ted Kremenek 40f87821c086a46411883b385c743996a35cc8e154Ted Kremenek int x = 4; // no-warning 411a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek int *p = &x; // expected-warning{{never read}} 42f87821c086a46411883b385c743996a35cc8e154Ted Kremenek 43a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek} 44a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek 45a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenekint f6() { 46a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek 47a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek int x = 4; 481a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek ++x; // expected-warning{{never read}} 49a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek return 1; 50a23157e6b9e2388edebd3d383dd7acfab6a4c0c0Ted Kremenek} 511a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek 521a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenekint f7(int *p) { 531a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek // This is allowed for defensive programming. 541a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek p = 0; // no-warning 551a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek return 1; 561a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek} 571a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek 5893fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenekint f7b(int *p) { 5993fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek // This is allowed for defensive programming. 6093fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek p = (0); // no-warning 6193fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek return 1; 6293fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek} 6393fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek 6493fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenekint f7c(int *p) { 6593fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek // This is allowed for defensive programming. 6693fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek p = (void*) 0; // no-warning 6793fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek return 1; 6893fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek} 6993fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek 7093fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenekint f7d(int *p) { 7193fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek // This is allowed for defensive programming. 7293fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek p = (void*) (0); // no-warning 7393fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek return 1; 7493fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek} 7593fab7c94008d9e2b1e4ce15784544c6710945feTed Kremenek 761a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenekint f8(int *p) { 774489fe10fa073eb326e2c8906db170f009050911Daniel Dunbar extern int *baz(); 78f66d5cd8926541099def3cb187d56eff60d3be99John McCall if ((p = baz())) // expected-warning{{Although the value}} 791a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek return 1; 801a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek return 0; 811a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek} 821a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenek 832cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenekint f9() { 842cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek int x = 4; 852cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek x = x + 10; // expected-warning{{never read}} 862cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek return 1; 872cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek} 882cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek 892cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenekint f10() { 902cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek int x = 4; 912cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek x = 10 + x; // expected-warning{{never read}} 922cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek return 1; 932cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek} 942cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek 958b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenekint f11() { 968b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenek int x = 4; 97380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek return x++; // expected-warning{{never read}} 988b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenek} 998b00b6e80dbeb04dd919699f7818344dd4cbaad9Ted Kremenek 100380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenekint f11b() { 101380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek int x = 4; 1027f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek return ((((++x)))); // no-warning 103380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek} 104380277e46ec1d2d9abedcddf357ceea935cbe576Ted Kremenek 105fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenekint f12a(int y) { 106fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek int x = y; // expected-warning{{never read}} 107fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek return 1; 108fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek} 109fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenekint f12b(int y) { 110fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek int x __attribute__((unused)) = y; // no-warning 111fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek return 1; 112fc7ff5540412f8003024e1b4940fb8408dff2ca6Ted Kremenek} 1132cfac226b028e5a2165af077268f70cd2ab4b1a8Ted Kremenek 114efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek// Filed with PR 2630. This code should produce no warnings. 115efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenekint f13(void) 116efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek{ 117efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek int a = 1; 118efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek int b, c = b = a + a; 119efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek 120efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek if (b > 0) 121efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek return (0); 122efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek 123efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek return (a + b + c); 124efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek} 125efe88f5776b42ec2defb8ba29269a6c3683e9485Ted Kremenek 126b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek// Filed with PR 2763. 12784fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenekint f14(int count) { 128b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek int index, nextLineIndex; 129b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek for (index = 0; index < count; index = nextLineIndex+1) { 130b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek nextLineIndex = index+1; // no-warning 131b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek continue; 132b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek } 133b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek return index; 134b497ebdce35c708e902db2d49183925a612b4914Ted Kremenek} 13584fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek 13684fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek// Test case for <rdar://problem/6248086> 13784fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenekvoid f15(unsigned x, unsigned y) { 13884fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek int count = x * y; // no-warning 13984fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek int z[count]; 14084fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek} 14184fa6b90abf73e8cc539c9947ed5a6286f588569Ted Kremenek 142610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenekint f16(int x) { 143610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek x = x * 2; 144d2025e26738c3017af6685e342a3a746cdf8249fTed Kremenek x = sizeof(int [x = (x || x + 1) * 2]) // expected-warning{{Although the value stored to 'x' is used}} 145d2025e26738c3017af6685e342a3a746cdf8249fTed Kremenek ? 5 : 8; 146610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek return x; 147610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek} 148610a09e409bea151a42dd907768f1e0c4b103f1fTed Kremenek 1493b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek// Self-assignments should not be flagged as dead stores. 150a5495eadc816b29954e22df55aa9a9d6bb41429cMike Stumpvoid f17() { 1513b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek int x = 1; 1523b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek x = x; // no-warning 1533b58786f85aaa173e122f6eaff0b6efa233d59a2Ted Kremenek} 1547f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek 1557f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek// <rdar://problem/6506065> 1567f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek// The values of dead stores are only "consumed" in an enclosing expression 157cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump// what that value is actually used. In other words, don't say "Although the 158cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump// value stored to 'x' is used...". 1597f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenekint f18() { 1607f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek int x = 0; // no-warning 1617f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek if (1) 1627f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek x = 10; // expected-warning{{Value stored to 'x' is never read}} 1637f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek while (1) 1647f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek x = 10; // expected-warning{{Value stored to 'x' is never read}} 1657f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek do 1667f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek x = 10; // expected-warning{{Value stored to 'x' is never read}} 1677f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek while (1); 1687f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek 1697f5fce7200fdbf03f7d70134a57271e584fcb766Ted 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'}} 1707f5fce7200fdbf03f7d70134a57271e584fcb766Ted Kremenek} 171d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek 172d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek// PR 3514: false positive `dead initialization` warning for init to global 173d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek// http://llvm.org/bugs/show_bug.cgi?id=3514 174d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenekextern const int MyConstant; 175d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenekint f19(void) { 176d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek int x = MyConstant; // no-warning 177d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek x = 1; 178d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek return x; 179d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek} 180d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek 18128433ff063fe5ba5eac486d4bfcfa9e210097772Ted Kremenekint f19b(void) { // This case is the same as f19. 182d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek const int MyConstant = 0; 18328433ff063fe5ba5eac486d4bfcfa9e210097772Ted Kremenek int x = MyConstant; // no-warning 184d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek x = 1; 185d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek return x; 186d3098ee64c069a3eff4d2d0a5d655d968c7b5dd2Ted Kremenek} 187632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek 188632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenekvoid f20(void) { 189632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek int x = 1; // no-warning 190632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek#pragma unused(x) 191632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek} 192632d1ece2715b1c8a0c99e1b8b487f4c148c89d5Ted Kremenek 193cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stumpvoid halt() __attribute__((noreturn)); 194cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stumpint f21() { 195cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump int x = 4; 196cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump 197cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump ++x; // expected-warning{{never read}} 198cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump if (1) { 199cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump halt(); 200cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump (void)x; 201cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump } 202cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump return 1; 203cd7bf230a77c550115e4a78ee371fc49a7563692Mike Stump} 204e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump 205e5af3ce53ec58995b09381ba645ab2117a46647bMike Stumpint j; 206e5af3ce53ec58995b09381ba645ab2117a46647bMike Stumpvoid f22() { 207e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int x = 4; 208e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y1 = 4; 209e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y2 = 4; 210e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y3 = 4; 211e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y4 = 4; 212e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y5 = 4; 213e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y6 = 4; 214e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y7 = 4; 215e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y8 = 4; 216e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y9 = 4; 217e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump int y10 = 4; 2185f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump int y11 = 4; 2195f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump int y12 = 4; 220fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump int y13 = 4; 221fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump int y14 = 4; 222fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump int y15 = 4; 2238f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump int y16 = 4; 2248f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump int y17 = 4; 2258f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump int y18 = 4; 22622cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump int y19 = 4; 22722cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump int y20 = 4; 228e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump 229e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++x; // expected-warning{{never read}} 230e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y1; 231e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y2; 232e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y3; 233e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y4; 234e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y5; 235e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y6; 236e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y7; 237e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y8; 238e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y9; 239e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump ++y10; 2405f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump ++y11; 2415f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump ++y12; 242fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump ++y13; 243fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump ++y14; 244fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump ++y15; 2458f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump ++y16; 2468f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump ++y17; 2478f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump ++y18; 24822cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump ++y19; 24922cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump ++y20; 250e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump 251e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump switch (j) { 252e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 1: 253e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump if (0) 254e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 255e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump if (1) { 256e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)y1; 257e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump return; 258e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump } 259e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 260e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 261e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 2: 262e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump if (0) 263e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 264e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump else { 265e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)y2; 266e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump return; 267e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump } 268e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 269e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 270e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 3: 271e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump if (1) { 272e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)y3; 273e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump return; 274e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump } else 275e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 276e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 277e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 278e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 4: 279e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump 0 ? : ((void)y4, ({ return; })); 280e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 281e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 282e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 5: 283e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump 1 ? : (void)x; 284e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump 0 ? (void)x : ((void)y5, ({ return; })); 285e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 286e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 287e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 6: 288e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump 1 ? ((void)y6, ({ return; })) : (void)x; 289e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 290e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 291e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 7: 292e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)(0 && x); 293e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)y7; 294e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)(0 || (y8, ({ return; }), 1)); 295e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 296e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 297e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 8: 298e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)(1 && (y9, ({ return; }), 1)); 299e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)x; 300e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump break; 301e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump case 9: 302e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)(1 || x); 303e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump (void)y10; 3045f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump break; 3055f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump case 10: 3068f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump while (0) { 3078f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)x; 3085f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump } 3098f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)y11; 3105f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump break; 3115f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump case 11: 3128f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump while (1) { 3138f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)y12; 3145f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump } 3158f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)x; 3165f20363dc8ea094b3f6139f52084beb10d6fcd85Mike Stump break; 317fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump case 12: 3188f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump do { 319fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump (void)y13; 3208f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump } while (0); 3218f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)y14; 3228f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump break; 3238f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump case 13: 3248f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump do { 3258f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)y15; 3268f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump } while (1); 3278f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)x; 3288f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump break; 3298f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump case 14: 3308f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump for (;;) { 3318f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)y16; 332fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump } 333fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump (void)x; 334fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump break; 3358f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump case 15: 336fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump for (;1;) { 3378f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)y17; 338fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump } 339fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump (void)x; 340fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump break; 3418f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump case 16: 342fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump for (;0;) { 343fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump (void)x; 344fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump } 3458f9893a2beeacd5149bd2d3d4c6e130516915068Mike Stump (void)y18; 346fefb9f7009702befaf715e7a8debc9505c3c8634Mike Stump break; 34722cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump case 17: 34822cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump __builtin_choose_expr(0, (void)x, ((void)y19, ({ return; }))); 34922cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump (void)x; 35022cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump break; 35122cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump case 19: 35222cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump __builtin_choose_expr(1, ((void)y20, ({ return; })), (void)x); 35322cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump (void)x; 35422cd6581188bbbc6bedaca64ab171b1187a1c06aMike Stump break; 355e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump } 356e5af3ce53ec58995b09381ba645ab2117a46647bMike Stump} 3573a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek 3583a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenekvoid f23_aux(const char* s); 3593a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenekvoid f23(int argc, char **argv) { 3603a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek int shouldLog = (argc > 1); // no-warning 3613a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek ^{ 3623a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek if (shouldLog) f23_aux("I did too use it!\n"); 3633a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek else f23_aux("I shouldn't log. Wait.. d'oh!\n"); 3643a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek }(); 3653a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek} 3663a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek 3673a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenekvoid f23_pos(int argc, char **argv) { 3683a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek int shouldLog = (argc > 1); // expected-warning{{Value stored to 'shouldLog' during its initialization is never read}} 3693a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek ^{ 3703a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek f23_aux("I did too use it!\n"); 3713a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek }(); 3723a9763491c41fe140a8777e0a71e046c56c9cbdbTed Kremenek} 3739a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek 3749a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekvoid f24_A(int y) { 3759a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek // FIXME: One day this should be reported as dead since 'z = x + y' is dead. 3769a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek int x = (y > 2); // no-warning 3779a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek ^ { 3789a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek int z = x + y; // FIXME: Eventually this should be reported as a dead store. 3799a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek }(); 3809a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek} 3819a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek 3829a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekvoid f24_B(int y) { 3839a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek // FIXME: One day this should be reported as dead since 'x' is just overwritten. 3849a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek __block int x = (y > 2); // no-warning 3859a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek ^{ 3869a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek // FIXME: This should eventually be a dead store since it is never read either. 3879a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek x = 5; // no-warning 3889a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek }(); 3899a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek} 3909a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek 3919a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekint f24_C(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 x = 5; // no-warning 3969a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek }(); 3979a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek return x; 3989a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek} 3999a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek 4009a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenekint f24_D(int y) { 4019a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek __block int x = (y > 2); // no-warning 4029a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek ^{ 4039a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek if (y > 4) 4049a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek x = 5; // no-warning 4059a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek }(); 4069a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek return x; 4079a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek} 4089a0459c0f59a09ac7287ca1f49083fc6b31e4142Ted Kremenek 409