Skip to content

SIGSEGV when simplifying extern call as a key #5439

@jhavrane

Description

@jhavrane

Program

#include <core.p4>

control Ingress();

package SimplePipeline(Ingress ing);
package SimpleArch(SimplePipeline p0);

@noSideEffects extern bit<8> get_some_data();

control MyIngress() {
    table t0 {
        key = {
            get_some_data() : exact @name("data");
        }
        actions = { NoAction; }
        const default_action = NoAction();
    }

    apply{ t0.apply(); }
}

SimpleArch(SimplePipeline(
    MyIngress()
)) main;

No crash when @noSideEffects annotation is not there.

Log

terminate called after throwing an instance of 'P4::Util::CompilerBug'
  what():  In file: ./p4c/lib/crash.cpp:299
Compiler Bug: Exiting with SIGSEGV

Stack

Seems like the IsValid pass is missing resolution context for looking up the extern method.

libstdc++.so.6!__cxa_throw (Unknown Source:0)
P4::crash_shutdown(int sig, siginfo_t * info, void * uctxt) (p4c\lib\crash.cpp:299)
libpthread.so.0!<signal handler called> (Unknown Source:0)
P4::Visitor::getParent<P4::IR::Type_Name>(const P4::IsValid * const this) (p4c\ir\visitor.h:247)
P4::ResolutionContext::getDeclaration(const P4::IsValid * const this, const P4::IR::Path * path, bool notNull) (p4c\frontends\common\resolveReferences\resolveReferences.cpp:278)
P4::MethodInstance::resolve(const P4::IR::MethodCallExpression * mce, const P4::IsValid * refMap, P4::TypeMap * typeMap, bool useExpressionType, const P4::Visitor::Context * ctxt, bool incomplete) (p4c\frontends\p4\methodInstance.cpp:106)
P4::IsValid::isSimple(P4::IsValid * const this, const P4::IR::MethodCallExpression * expression, const P4::Visitor::Context * ctxt) (p4c\midend\simplifyKey.cpp:27)
P4::OrPolicy::isSimple(P4::OrPolicy * const this, const P4::IR::MethodCallExpression * expression, const P4::Visitor::Context * ctxt) (p4c\midend\simplifyKey.h:108)
P4::DoSimplifyKey::postorder(P4::DoSimplifyKey * const this, P4::IR::KeyElement * element) (p4c\midend\simplifyKey.cpp:42)
P4::IR::KeyElement::apply_visitor_postorder(P4::IR::KeyElement * const this, P4::DoSimplifyKey & v) (p4c\ir\visitor.cpp:751)
P4::Transform::apply_visitor(P4::DoSimplifyKey * const this, const P4::IR::KeyElement * n, const char * name) (p4c\ir\visitor.cpp:585)
P4::IR::Vector<P4::IR::KeyElement>::visit_children(P4::IR::Vector<P4::IR::KeyElement> * const this, P4::DoSimplifyKey & v, const char * name) (p4c\ir\ir-inline.h:85)
P4::IR::Key::visit_children(P4::IR::Key * const this, P4::DoSimplifyKey & v, const char * n) (build\p4c\ir\ir-generated.cpp:6050)
P4::Transform::apply_visitor(P4::DoSimplifyKey * const this, const P4::IR::Key * n, const char * name) (p4c\ir\visitor.cpp:584)
P4::Visitor::visit(P4::DoSimplifyKey * const this, const P4::IR::PropertyValue *& n, const char * name) (p4c\ir\visitor.cpp:773)
P4::IR::Property::visit_children(P4::IR::Property * const this, P4::DoSimplifyKey & v, const char * n) (build\p4c\ir\ir-generated.cpp:6213)
P4::Transform::apply_visitor(P4::DoSimplifyKey * const this, const P4::IR::Property * n, const char * name) (p4c\ir\visitor.cpp:584)
P4::IR::IndexedVector<P4::IR::Property>::visit_children(P4::IR::IndexedVector<P4::IR::Property> * const this, P4::DoSimplifyKey & v, const char * name) (p4c\ir\ir-inline.h:154)
P4::IR::TableProperties::visit_children(P4::IR::TableProperties * const this, P4::DoSimplifyKey & v, const char * n) (build\p4c\ir\ir-generated.cpp:6281)
P4::Transform::apply_visitor(P4::DoSimplifyKey * const this, const P4::IR::TableProperties * n, const char * name) (p4c\ir\visitor.cpp:584)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions