Author: szelethus Date: Tue Mar 12 04:22:30 2019 New Revision: 355911 URL: http://llvm.org/viewvc/llvm-project?rev=355911&view=rev Log: Revert "[analyzer] Fix function macro crash"
Buildbot breaks when LLVm is compiled with memory sanitizer. WARNING: MemorySanitizer: use-of-uninitialized-value #0 0xa3d16d8 in getMacroNameAndPrintExpansion(blahblah) lib/StaticAnalyzer/Core/PlistDiagnostics.cpp:903:11 Modified: cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp cfe/trunk/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist cfe/trunk/test/Analysis/plist-macros-with-expansion.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp?rev=355911&r1=355910&r2=355911&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp Tue Mar 12 04:22:30 2019 @@ -900,7 +900,7 @@ static std::string getMacroNameAndPrintE // If this is a function-like macro, skip its arguments, as // getExpandedMacro() already printed them. If this is the case, let's // first jump to the '(' token. - if (std::next(It)->is(tok::l_paren)) + if (MI->getNumParams() != 0) It = getMatchingRParen(++It, E); continue; } @@ -928,15 +928,7 @@ static std::string getMacroNameAndPrintE getMacroNameAndPrintExpansion(Printer, ArgIt->getLocation(), PP, Info.Args, AlreadyProcessedTokens); - // Peek the next token if it is a tok::l_paren. This way we can decide - // if this is the application or just a reference to a function maxro - // symbol: - // - // #define apply(f) ... - // #define func(x) ... - // apply(func) - // apply(func(42)) - if (std::next(ArgIt)->is(tok::l_paren)) + if (MI->getNumParams() != 0) ArgIt = getMatchingRParen(++ArgIt, ArgEnd); } continue; @@ -998,16 +990,8 @@ static MacroNameAndArgs getMacroNameAndA return { MacroName, MI, {} }; RawLexer.LexFromRawLexer(TheTok); - // When this is a token which expands to another macro function then its - // parentheses are not at its expansion locaiton. For example: - // - // #define foo(x) int bar() { return x; } - // #define apply_zero(f) f(0) - // apply_zero(foo) - // ^ - // This is not a tok::l_paren, but foo is a function. - if (TheTok.isNot(tok::l_paren)) - return { MacroName, MI, {} }; + assert(TheTok.is(tok::l_paren) && + "The token after the macro's identifier token should be '('!"); MacroArgMap Args; Modified: cfe/trunk/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist?rev=355911&r1=355910&r2=355911&view=diff ============================================================================== --- cfe/trunk/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist (original) +++ cfe/trunk/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist Tue Mar 12 04:22:30 2019 @@ -5577,484 +5577,6 @@ </array> </dict> </dict> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>33</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>33</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>39</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>41</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Calling 'foo'</string> - <key>message</key> - <string>Calling 'foo'</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>458</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <key>depth</key><integer>1</integer> - <key>extended_message</key> - <string>Entered call from 'useZeroApplier1'</string> - <key>message</key> - <string>Entered call from 'useZeroApplier1'</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>458</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>458</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>458</integer> - <key>col</key><integer>16</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>1</integer> - <key>extended_message</key> - <string>Returning zero</string> - <key>message</key> - <string>Returning zero</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>41</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Returning from 'foo'</string> - <key>message</key> - <string>Returning from 'foo'</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>39</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>33</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>41</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Division by zero</string> - <key>message</key> - <string>Division by zero</string> - </dict> - </array> - <key>macro_expansions</key> - <array> - <dict> - <key>location</key> - <dict> - <key>line</key><integer>458</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <key>name</key><string>APPLY_ZERO1</string> - <key>expansion</key><string>int foo() { return x; }(0)</string> - </dict> - </array> - <key>description</key><string>Division by zero</string> - <key>category</key><string>Logic error</string> - <key>type</key><string>Division by zero</string> - <key>check_name</key><string>core.DivideZero</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>7ff82561a6c752746649d05220deeb40</string> - <key>issue_context_kind</key><string>function</string> - <key>issue_context</key><string>useZeroApplier1</string> - <key>issue_hash_function_offset</key><string>0</string> - <key>location</key> - <dict> - <key>line</key><integer>459</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ExecutedLines</key> - <dict> - <key>0</key> - <array> - <integer>458</integer> - <integer>459</integer> - </array> - </dict> - </dict> - <dict> - <key>path</key> - <array> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>33</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>33</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>39</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>41</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Calling 'bar'</string> - <key>message</key> - <string>Calling 'bar'</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>467</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <key>depth</key><integer>1</integer> - <key>extended_message</key> - <string>Entered call from 'useZeroApplier2'</string> - <key>message</key> - <string>Entered call from 'useZeroApplier2'</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>467</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>467</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>467</integer> - <key>col</key><integer>11</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>1</integer> - <key>extended_message</key> - <string>Returning zero</string> - <key>message</key> - <string>Returning zero</string> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>41</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Returning from 'bar'</string> - <key>message</key> - <string>Returning from 'bar'</string> - </dict> - <dict> - <key>kind</key><string>control</string> - <key>edges</key> - <array> - <dict> - <key>start</key> - <array> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>37</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>39</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - <key>end</key> - <array> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </dict> - </array> - </dict> - <dict> - <key>kind</key><string>event</string> - <key>location</key> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ranges</key> - <array> - <array> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>33</integer> - <key>file</key><integer>0</integer> - </dict> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>41</integer> - <key>file</key><integer>0</integer> - </dict> - </array> - </array> - <key>depth</key><integer>0</integer> - <key>extended_message</key> - <string>Division by zero</string> - <key>message</key> - <string>Division by zero</string> - </dict> - </array> - <key>macro_expansions</key> - <array> - <dict> - <key>location</key> - <dict> - <key>line</key><integer>467</integer> - <key>col</key><integer>1</integer> - <key>file</key><integer>0</integer> - </dict> - <key>name</key><string>APPLY_ZERO2</string> - <key>expansion</key><string>int bar() { return 0; }</string> - </dict> - </array> - <key>description</key><string>Division by zero</string> - <key>category</key><string>Logic error</string> - <key>type</key><string>Division by zero</string> - <key>check_name</key><string>core.DivideZero</string> - <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>dd82c11b436b00009e37f54b1620a728</string> - <key>issue_context_kind</key><string>function</string> - <key>issue_context</key><string>useZeroApplier2</string> - <key>issue_hash_function_offset</key><string>0</string> - <key>location</key> - <dict> - <key>line</key><integer>468</integer> - <key>col</key><integer>35</integer> - <key>file</key><integer>0</integer> - </dict> - <key>ExecutedLines</key> - <dict> - <key>0</key> - <array> - <integer>467</integer> - <integer>468</integer> - </array> - </dict> - </dict> </array> <key>files</key> <array> Modified: cfe/trunk/test/Analysis/plist-macros-with-expansion.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/plist-macros-with-expansion.cpp?rev=355911&r1=355910&r2=355911&view=diff ============================================================================== --- cfe/trunk/test/Analysis/plist-macros-with-expansion.cpp (original) +++ cfe/trunk/test/Analysis/plist-macros-with-expansion.cpp Tue Mar 12 04:22:30 2019 @@ -451,21 +451,3 @@ void recursiveMacroUser() { 1 / value; // expected-warning{{Division by zero}} // expected-warning@-1{{expression result unused}} } - -#define FOO(x) int foo() { return x; } -#define APPLY_ZERO1(function) function(0) - -APPLY_ZERO1(FOO) -void useZeroApplier1() { (void)(1 / foo()); } // expected-warning{{Division by zero}} - -// CHECK: <key>name</key><string>APPLY_ZERO1</string> -// CHECK-NEXT: <key>expansion</key><string>int foo() { return x; }(0)</string> - -#define BAR(x) int bar() { return x; } -#define APPLY_ZERO2 BAR(0) - -APPLY_ZERO2 -void useZeroApplier2() { (void)(1 / bar()); } // expected-warning{{Division by zero}} - -// CHECK: <key>name</key><string>APPLY_ZERO2</string> -// CHECK-NEXT: <key>expansion</key><string>int bar() { return 0; }</string> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits