Каково время жизни составных литералов, передаваемых в качестве аргументов?

Это компилируется без предупреждений с использованием Clang.

typedef struct {
  int option;
  int value;
} someType;

someType *init(someType *ptr) {
  *ptr = (someType) {
    .option = ptr->option | ANOTHEROPT,
    .value = 1
  };

  return ptr;
}

int main()
{
  someType *typePtr = init( &(someType) {
    .option = SOMEOPT
  });
  // do something else with typePtr
}

Это даже действительный C?

Если так: каково время жизни составного литерала?

Ответы на вопрос(2)

Ваш ответ на вопрос