Szelethus updated this revision to Diff 169869. Szelethus added a comment. Herald added a subscriber: dkrupp.
Rebased to part 3. https://reviews.llvm.org/D52986 Files: lib/StaticAnalyzer/Core/PlistDiagnostics.cpp test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist test/Analysis/plist-macros-with-expansion.cpp
Index: test/Analysis/plist-macros-with-expansion.cpp =================================================================== --- test/Analysis/plist-macros-with-expansion.cpp +++ test/Analysis/plist-macros-with-expansion.cpp @@ -261,9 +261,8 @@ *ptr = 5; // expected-warning{{Dereference of null pointer}} } -// TODO: Should correctly display the rest of the parameters. // CHECK: <key>name</key><string>VARIADIC_SET_TO_NULL</string> -// CHECK: <key>expansion</key><string>ptr = nullptr; variadicFunc( 1)</string> +// CHECK: <key>expansion</key><string>ptr = nullptr; variadicFunc( 1, 5, "haha!")</string> //===----------------------------------------------------------------------===// // Tests for # and ##. Index: test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist =================================================================== --- test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist +++ test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist @@ -3588,7 +3588,7 @@ <key>file</key><integer>0</integer> </dict> <key>name</key><string>VARIADIC_SET_TO_NULL</string> - <key>expansion</key><string>ptr = nullptr; variadicFunc( 1)</string> + <key>expansion</key><string>ptr = nullptr; variadicFunc( 1, 5, "haha!")</string> </dict> <dict> <key>kind</key><string>event</string> @@ -3720,25 +3720,25 @@ <key>start</key> <array> <dict> - <key>line</key><integer>277</integer> + <key>line</key><integer>276</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>277</integer> + <key>line</key><integer>276</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> </array> <key>end</key> <array> <dict> - <key>line</key><integer>278</integer> + <key>line</key><integer>277</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>278</integer> + <key>line</key><integer>277</integer> <key>col</key><integer>30</integer> <key>file</key><integer>0</integer> </dict> @@ -3750,7 +3750,7 @@ <key>kind</key><string>macro_expansion</string> <key>location</key> <dict> - <key>line</key><integer>278</integer> + <key>line</key><integer>277</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3761,20 +3761,20 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>278</integer> + <key>line</key><integer>277</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <key>ranges</key> <array> <array> <dict> - <key>line</key><integer>278</integer> + <key>line</key><integer>277</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>278</integer> + <key>line</key><integer>277</integer> <key>col</key><integer>45</integer> <key>file</key><integer>0</integer> </dict> @@ -3794,25 +3794,25 @@ <key>start</key> <array> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> </array> <key>end</key> <array> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -3824,20 +3824,20 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> <key>ranges</key> <array> <array> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -3861,18 +3861,18 @@ <key>issue_hash_function_offset</key><string>3</string> <key>location</key> <dict> - <key>line</key><integer>279</integer> + <key>line</key><integer>278</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> <key>ExecutedLines</key> <dict> <key>0</key> <array> + <integer>275</integer> <integer>276</integer> <integer>277</integer> <integer>278</integer> - <integer>279</integer> </array> </dict> </dict> @@ -3887,25 +3887,25 @@ <key>start</key> <array> <dict> - <key>line</key><integer>291</integer> + <key>line</key><integer>290</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>291</integer> + <key>line</key><integer>290</integer> <key>col</key><integer>5</integer> <key>file</key><integer>0</integer> </dict> </array> <key>end</key> <array> <dict> - <key>line</key><integer>292</integer> + <key>line</key><integer>291</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>292</integer> + <key>line</key><integer>291</integer> <key>col</key><integer>11</integer> <key>file</key><integer>0</integer> </dict> @@ -3917,7 +3917,7 @@ <key>kind</key><string>macro_expansion</string> <key>location</key> <dict> - <key>line</key><integer>292</integer> + <key>line</key><integer>291</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> @@ -3928,20 +3928,20 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>292</integer> + <key>line</key><integer>291</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <key>ranges</key> <array> <array> <dict> - <key>line</key><integer>292</integer> + <key>line</key><integer>291</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>292</integer> + <key>line</key><integer>291</integer> <key>col</key><integer>23</integer> <key>file</key><integer>0</integer> </dict> @@ -3961,25 +3961,25 @@ <key>start</key> <array> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>3</integer> <key>file</key><integer>0</integer> </dict> </array> <key>end</key> <array> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> @@ -3991,20 +3991,20 @@ <key>kind</key><string>event</string> <key>location</key> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> <key>ranges</key> <array> <array> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>4</integer> <key>file</key><integer>0</integer> </dict> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>6</integer> <key>file</key><integer>0</integer> </dict> @@ -4028,18 +4028,18 @@ <key>issue_hash_function_offset</key><string>3</string> <key>location</key> <dict> - <key>line</key><integer>293</integer> + <key>line</key><integer>292</integer> <key>col</key><integer>8</integer> <key>file</key><integer>0</integer> </dict> <key>ExecutedLines</key> <dict> <key>0</key> <array> + <integer>289</integer> <integer>290</integer> <integer>291</integer> <integer>292</integer> - <integer>293</integer> </array> </dict> </dict> Index: lib/StaticAnalyzer/Core/PlistDiagnostics.cpp =================================================================== --- lib/StaticAnalyzer/Core/PlistDiagnostics.cpp +++ lib/StaticAnalyzer/Core/PlistDiagnostics.cpp @@ -873,15 +873,24 @@ // we will find tok::l_paren, tok::r_paren, and tok::comma that do not divide // actual macro arguments, or do not represent the macro argument's closing // parantheses, so we'll count how many parantheses aren't closed yet. + // If ParanthesesDepth + // * = 0, then there are no more arguments to lex. + // * = 1, then if we find a tok::comma, we can start lexing the next arg. + // * > 1, then tok::comma is a part of the current arg. int ParanthesesDepth = 1; + // If we encounter __VA_ARGS__, we will lex until the closing tok::r_paren, + // even if we lex a tok::comma and ParanthesesDepth == 1. + const IdentifierInfo *__VA_ARGS__II = PP.getIdentifierInfo("__VA_ARGS__"); + for (const IdentifierInfo *UnexpArgII : MacroArgs) { MacroArgMap::mapped_type ExpandedArgTokens; // Lex the first token of the next macro parameter. RawLexer.LexFromRawLexer(TheTok); - while (TheTok.isNot(tok::comma) || ParanthesesDepth != 1) { + while (!(ParanthesesDepth == 1 && + (UnexpArgII == __VA_ARGS__II ? false : TheTok.is(tok::comma)))) { assert(TheTok.isNot(tok::eof) && "EOF encountered while looking for expanded macro args!"); @@ -904,9 +913,7 @@ Args.emplace(UnexpArgII, std::move(ExpandedArgTokens)); } - // TODO: The condition really should be TheTok.is(tok::r_paren), but variadic - // macro arguments are not handled yet. - assert(TheTok.isOneOf(tok::r_paren, tok::comma) && + assert(TheTok.is(tok::r_paren) && "Expanded macro argument acquisition failed! After the end of the loop" " this token should be ')'!");
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits