diff options
author | Kristof Umann <dkszelethus@gmail.com> | 2019-03-08 16:26:29 +0000 |
---|---|---|
committer | Kristof Umann <dkszelethus@gmail.com> | 2019-03-08 16:26:29 +0000 |
commit | d036e64e31db06c27dc2e0ecb3e5d43ee5b97f88 (patch) | |
tree | c8e004f27cd40993e40268e24f6562e1b376ec44 /test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist | |
parent | 2dc981e77f2a9d8b445544f4f9128dd7fdfea382 (diff) |
[analyzer] Fix infinite recursion in printing macros
In the commited testfile, macro expansion (the one implemented for the plist
output) runs into an infinite recursion. The issue originates from the algorithm
being faulty, as in
#define value REC_MACRO_FUNC(value)
the "value" is being (or at least attempted) expanded from the same macro.
The solved this issue by gathering already visited macros in a set, which does
resolve the crash, but will result in an incorrect macro expansion, that would
preferably be fixed down the line.
Patch by Tibor Brunner!
Differential Revision: https://reviews.llvm.org/D57891
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@355705 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist')
-rw-r--r-- | test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist b/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist index 4d1d42438e..68f02a38fd 100644 --- a/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist +++ b/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist @@ -5443,6 +5443,140 @@ </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>450</integer> + <key>col</key><integer>3</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>450</integer> + <key>col</key><integer>4</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + <key>end</key> + <array> + <dict> + <key>line</key><integer>450</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>450</integer> + <key>col</key><integer>11</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>450</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>450</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>450</integer> + <key>col</key><integer>16</integer> + <key>file</key><integer>0</integer> + </dict> + </array> + </array> + <key>depth</key><integer>0</integer> + <key>extended_message</key> + <string>Assuming 'garbage_value' is equal to 0</string> + <key>message</key> + <string>Assuming 'garbage_value' is equal to 0</string> + </dict> + <dict> + <key>kind</key><string>event</string> + <key>location</key> + <dict> + <key>line</key><integer>451</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ranges</key> + <array> + <array> + <dict> + <key>line</key><integer>451</integer> + <key>col</key><integer>5</integer> + <key>file</key><integer>0</integer> + </dict> + <dict> + <key>line</key><integer>451</integer> + <key>col</key><integer>13</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>450</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>name</key><string>value</string> + <key>expansion</key><string>garbage_</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>1f3c94860e67b6b863e956bd67e49f1d</string> + <key>issue_context_kind</key><string>function</string> + <key>issue_context</key><string>recursiveMacroUser</string> + <key>issue_hash_function_offset</key><string>2</string> + <key>location</key> + <dict> + <key>line</key><integer>451</integer> + <key>col</key><integer>7</integer> + <key>file</key><integer>0</integer> + </dict> + <key>ExecutedLines</key> + <dict> + <key>0</key> + <array> + <integer>449</integer> + <integer>450</integer> + <integer>451</integer> + </array> + </dict> + </dict> </array> <key>files</key> <array> |