Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

-Wconsumed leads to: Assertion failed: (StateMapsArray[Block->getBlockID()] && "Block has no block info"), function borrowInfo, file tools/clang/lib/Analysis/Consumed.cpp, line 1080. #20776

Closed
DimitryAndric opened this issue Jul 22, 2014 · 3 comments
Labels
bugzilla Issues migrated from bugzilla clang Clang issues not falling into any other category

Comments

@DimitryAndric
Copy link
Collaborator

Bugzilla Link 20402
Resolution FIXED
Resolved on Apr 15, 2015 17:36
Version trunk
OS All
CC @AaronBallman

Extended Description

This assertion was reported by Benjamin Kaduk here:
http://lists.freebsd.org/pipermail/freebsd-current/2014-July/051348.html

I reduced the test case to this very short .c file, which reproduces the assertion with clang trunk r213143:

$ cat testcase.c
a;
GetToken() {
S1:
switch (a)
case ' ':
goto S1;
goto S1;
}
static
$ clang -v
clang version 3.5.0 (trunk 213143)
Target: x86_64-unknown-freebsd11.0
Thread model: posix
$ clang -cc1 -triple x86_64-unknown-freebsd11.0 -emit-obj -Wconsumed testcase.c
clang -cc1 -triple x86_64-unknown-freebsd11.0 -emit-obj -Wconsumed testcase.c
testcase.c:1:1: warning: type specifier missing, defaults to 'int'
a;
^
testcase.c:2:1: warning: type specifier missing, defaults to 'int'
GetToken() {
^~~~~~~~
Assertion failed: (StateMapsArray[Block->getBlockID()] && "Block has no block info"), function borrowInfo, file /share/dim/src/llvm/trunk/tools/clang/lib/Analysis/Consumed.cpp, line 1080.
Stack dump:
0. Program arguments: /share/dim/llvm/213143-trunk-freebsd11-amd64-aconf-rel-2/bin/clang -cc1 -triple x86_64-unknown-freebsd11.0 -emit-obj -Wconsumed testcase.c

  1. testcase.c:9:1: current parser token 'static'
  2. testcase.c:2:12: parsing function body 'GetToken'
    Abort trap

Obviously, a workaround is to remove -Wconsumed, but this warning was not explicitly enabled the original reporter; he was using -Weverything.

@DimitryAndric
Copy link
Collaborator Author

Just to make it explicit, this assertion only fires when -Wconsumed is used (or turned on via e.g. -Weverything).

@AaronBallman
Copy link
Collaborator

The state map information starts out with null entries, and so attempting to "borrow" that null entry is what generates the assertion.

One possible way to fix that is to add a ConsumedBlockInfo::hasInfo() function, and not attempt to borrow when that is false. However, that may also be a very hackish solution. Delesley or Chris may have a better idea.

@llvmbot
Copy link
Collaborator

llvmbot commented Apr 16, 2015

Bugfix submitted by Chris Wailes, and released as r235051.

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 9, 2021
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugzilla Issues migrated from bugzilla clang Clang issues not falling into any other category
Projects
None yet
Development

No branches or pull requests

3 participants