A polymorphic VI that breaks the run arrow the moment it lands on the diagram is almost never a defect in the shipping code. It is a linkage problem: one member instance inside Acquire Input Data.vi no longer resolves to the file the polymorphic wrapper expects. The wrapper stores a path plus a connector-pane map for every instance. Break one entry and the whole wrapper goes broken, even though every other instance is intact and the offending member opens and runs perfectly on its own.
The crash is the same fault seen from the other side. Turning the polymorphic selector forces LabVIEW to swap the subVI node's link in place. That swap works on the in-memory instance record, not on the file. When the record points at a member that loaded partially or whose connector pane no longer matches the stored map, the swap dereferences garbage and LabVIEW dies with an internal file and line number instead of a clean error dialog. Iuse.cpp line 1841 is the symptom of the bad link, not the cause.
Get it running, then fix it properly: relink or restore the single member VI. Do not reinstall LabVIEW yet.
Skip the Three Fixes That Waste the Shift
-
Dragging a fresh copy off the palette. The palette points at the same
vi.libfile. The new copy breaks identically. - Restarting LabVIEW. Clears memory, changes nothing on disk. If the bad link is a duplicate file in the search path, it reloads on the next open.
-
Full uninstall and reinstall. Two to four hours, and it will not remove a stray duplicate VI sitting in
user.libor a project folder, because the installer never put it there.
Check 1: Read the Error List Before Touching Anything
- Open the broken caller and click the broken run arrow. The Error List names the offending node and the reason.
- Open
Acquire Input Data.viitself fromvi.lib, then use the polymorphic VI's instance list to see which member carries the broken arrow. - Record the exact wording. It routes the rest of the job.
| Error List text | What it means | Go to |
|---|---|---|
| SubVI is not executable | The member itself is broken, or a subVI below it is | Check 2 |
| Connector pane of the subVI has changed | The loaded member's terminal map no longer matches the wrapper's stored map | Check 2 |
| SubVI not found / node appears grayed | The instance never loaded; every caller holding that refnum shows a placeholder node | Check 3 |
| Member opens standalone and runs clean | Classic cross-link: two files with the same name on disk | Check 2 |
The last row is the one that trips people. A member VI that runs by itself but breaks its parent is the signature of cross-linking, not corruption.
Check 2: Hunt the Cross-Linked Duplicate
LabVIEW resolves subVIs by name against a search path list, and the first match wins. Any second file with the member's name — dropped into user.lib, left behind by a toolkit or VI Package, sitting in the project directory, or buried in an LLB on the search path — will be loaded in place of the vi.lib original. Its connector pane will not match, and the wrapper breaks.
- With the polymorphic VI open, select View > This VI's SubVIs (or check the title bar of the opened member) and confirm the full path each instance resolved to.
- If any instance resolved outside
vi.lib, you found it. Move the duplicate out of the search path — rename the folder, do not delete until the fix verifies. - Search the whole LabVIEW directory tree plus your project folders for the member VI's filename. Expect exactly one hit under
vi.lib. - Check Tools > Options > Paths > VI Search Path for entries added by an installer or by hand that point at a stale code archive.
- Close all VIs, restart LabVIEW, reopen the caller.
Stop here if the run arrow comes back solid. Save nothing in vi.lib. You are done.
Check 3: Force a Recompile and Clear the Cache
If the paths are clean and the member still breaks in context, the compiled code is stale rather than the source.
- Open the broken member and press Ctrl+Shift+Run arrow to force a recompile of that VI and its hierarchy, then save it.
- On LabVIEW versions that keep compiled code out of the VI file, run Tools > Advanced > Clear Compiled Object Cache, close LabVIEW, and reopen.
- Mass compile the Input Device Control directory under
vi.libwith Tools > Advanced > Mass Compile. Watch the log window: it lists every VI that fails to load and the reason, which is often more specific than the Error List. - If LabVIEW is installed under
Program Files, launch it as administrator first. Without write permission, relinked VIs cannot save and the fix evaporates on the next launch.
Mass compile only after Check 2. Compiling with a cross-linked duplicate in the search path bakes the wrong link into every caller in the tree.
Restore the Member VI: Repair Install, Not CAB Archaeology
Pulling one VI out of the distribution media is possible — the payload lives inside compressed archives, and a file manager that can browse and search inside .cab files will get you there if you already know the internal path. It is slow, easy to get wrong, and gives you no guarantee the extracted file matches the service pack level currently installed.
Use the installer's own repair path instead:
- Close LabVIEW.
- Open the Windows program list, select the LabVIEW development system entry, and choose Repair (or run the distribution media's installer and pick Repair when prompted).
- Point it at the same media the machine was installed from. Repair replaces mismatched or missing files without touching your projects, and it is a fraction of the time of an uninstall.
- Reapply any service pack or patch that was installed after the base version. Repair rolls files back to the media's revision.
- Relaunch and reopen the caller.
Copying the file from another machine works only if the LabVIEW version and bitness match exactly. A VI saved by a newer version will not open in an older one, and if a newer LabVIEW ever opened your vi.lib and saved it, that is your root cause.
Verify, Then Watch for These
- Place a fresh
Acquire Input Data.vifrom the palette on a blank diagram. Run arrow must be solid before you wire anything. - Cycle the polymorphic selector through every instance. No crash, no broken arrow at any position.
- Open a shipping example that wires a keyboard refnum and run it. The node must render normally — no gray placeholder.
- Close LabVIEW completely, reopen, and load the same example. Relinks only persist if the callers were saved; a fix that survives a restart is a real fix.
- Confirm the Error List is empty on the top-level VI, not just on the member.
Recurring traps on this class of failure:
- Editing a polymorphic member's connector pane invalidates the wrapper's instance map. Never resave a
vi.libmember after opening it to "check" it. - Toolkits and VI Packages that install into
user.libwith generic filenames are the usual source of cross-links. Audit that folder after any add-on install. - Opening a project with a mixed-version LabVIEW installation silently upgrades
vi.libfiles. Keep versions on separate machines or separate installs. - A read-only
vi.libproduces a fix that works until you close LabVIEW, then reverts.
FAQ
How do I find which instance of a polymorphic VI is broken?
Open the polymorphic VI from vi.lib and review its instance list — the broken member shows a broken run arrow. Then click the broken run arrow on your top-level VI to get the Error List text, which names the node and the failure reason.
How do I extract a single VI from the LabVIEW installation media?
The files sit inside compressed .cab archives on the media and can be browsed with a file manager that searches inside archives, but you need the exact internal path. Running the installer's Repair option is faster and guarantees the file matches your installed revision.
How do I fix a subVI that runs fine alone but breaks its caller?
That is cross-linking. Check the resolved path of the subVI node with View > This VI's SubVIs, then remove any duplicate file of the same name from user.lib, your project folder, or the VI Search Path, and restart LabVIEW.
How do I clear stale compiled code without reinstalling?
Use Tools > Advanced > Clear Compiled Object Cache, restart LabVIEW, then mass compile the affected vi.lib subfolder. Force a single VI to recompile with Ctrl+Shift+Run arrow.
How do I stop grayed-out subVI nodes from coming back after a relink?
Save each caller after the links resolve and run LabVIEW with write permission to the installation directory. A relink held only in memory reverts the next time you launch.
If a Repair install completes cleanly, the search path holds one copy of the member VI, and the polymorphic selector still crashes at Iuse.cpp, stop working the file. Capture the crash dialog text and the log written to your LabVIEW Data folder, note the LabVIEW version and service pack, and open a case with NI technical support. Repeated internal-file crashes after a verified repair point at the installation or the OS-level file state, not at anything you can fix from the diagram.