Skip to content

[clang] seems like bug with return type deduction in case of recursive function (works in GCC) #71015

@vampyrofangclub

Description

@vampyrofangclub

Here is an example

struct Node {
  int value;
  Node* left;
  Node* right;
};

bool parse(const char*);
Node* parsePrimaryExpr();

auto parseMulExpr(auto node) {
  if (node == nullptr) node = parsePrimaryExpr();
  if (!parse("*")) return node;
  return parseMulExpr(new Node{.left = node, .right = parsePrimaryExpr()});
}

int main(){
  parseMulExpr((Node*)nullptr);
}

Clang gives this error

<source>:13:10: error: function 'parseMulExpr<Node *>' with deduced return type cannot be used before it is defined
   13 |   return parseMulExpr(new Node{.left = node, .right = parsePrimaryExpr()});
      |          ^
<source>:10:6: note: 'parseMulExpr<Node *>' declared here
   10 | auto parseMulExpr(auto node) {
      |      ^
1 error generated.
Compiler returned: 1

https://godbolt.org/z/7WTYYben5

Metadata

Metadata

Assignees

Labels

clang:frontendLanguage frontend issues, e.g. anything involving "Sema"confirmedVerified by a second party

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions