[cfe-dev] Potential bug in typeof (gnu extension) parsing

David Blaikie dblaikie at gmail.com
Tue Sep 20 22:01:34 PDT 2011


I was mucking about with typeof (discovered it looking at DeclSpecs various
SourceLocation information trying to piece together SourceLocations/Ranges
covering the entire return type both before & after the identifier) & I
discovered this curious behavior:

Given this:

    int i = 3;
    typeof(i) (*foo())() {
    }

The following output is provided

  typeof.cpp:2:13: error: use of undeclared identifier 'foo'
typeof(i) (*foo())()              ^  typeof.cc:4:2: error: expected
unqualified-id  }   ^

If I use a simple function (typeof(i) foo() {}) it compiles fine. If I use
gcc/g++ I get a very similar error to the one clang provides. So it's at
least bug-for-bug compatible, but I'm wondering what the desired behavior is
here & why this case would be failing in the way it is.

Interestingly, C++0x's decltype works totally fine here (ie: compiles
without error). So I'm wondering: in what way is typeof not just an alias
for decltype? Should it be? (could we remove some redundant code in clang by
coalescing these two cases together) Or is there some legitimate reason for
these errors.

- David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110920/3a7a0e13/attachment.html>


More information about the cfe-dev mailing list