summaryrefslogtreecommitdiff
path: root/source/compiler/aslload.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/compiler/aslload.c')
-rw-r--r--source/compiler/aslload.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/source/compiler/aslload.c b/source/compiler/aslload.c
index 955fd7f454a41..99ec1bfe06dfa 100644
--- a/source/compiler/aslload.c
+++ b/source/compiler/aslload.c
@@ -698,6 +698,25 @@ LdNamespace1Begin (
*/
Status = AE_OK;
}
+ else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
+ (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
+ (ObjectType == ACPI_TYPE_ANY))
+ {
+ /* Allow update of externals of unknown type. */
+
+ if (AcpiNsOpensScope (ActualObjectType))
+ {
+ Node->Type = (UINT8) ActualObjectType;
+ Status = AE_OK;
+ }
+ else
+ {
+ sprintf (MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
+ AcpiUtGetTypeName (Node->Type));
+ AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
+ return_ACPI_STATUS (AE_OK);
+ }
+ }
else
{
/* Valid error, object already exists */