r355911 - Revert "[analyzer] Fix function macro crash"
Kristof Umann via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 12 04:22:30 PDT 2019
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 at -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>
More information about the cfe-commits
mailing list